{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import tensorflow as tf\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "sns.set()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Date</th>\n",
       "      <th>Open</th>\n",
       "      <th>High</th>\n",
       "      <th>Low</th>\n",
       "      <th>Close</th>\n",
       "      <th>Adj Close</th>\n",
       "      <th>Volume</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2016-11-02</td>\n",
       "      <td>778.200012</td>\n",
       "      <td>781.650024</td>\n",
       "      <td>763.450012</td>\n",
       "      <td>768.700012</td>\n",
       "      <td>768.700012</td>\n",
       "      <td>1872400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2016-11-03</td>\n",
       "      <td>767.250000</td>\n",
       "      <td>769.950012</td>\n",
       "      <td>759.030029</td>\n",
       "      <td>762.130005</td>\n",
       "      <td>762.130005</td>\n",
       "      <td>1943200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2016-11-04</td>\n",
       "      <td>750.659973</td>\n",
       "      <td>770.359985</td>\n",
       "      <td>750.560974</td>\n",
       "      <td>762.020020</td>\n",
       "      <td>762.020020</td>\n",
       "      <td>2134800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2016-11-07</td>\n",
       "      <td>774.500000</td>\n",
       "      <td>785.190002</td>\n",
       "      <td>772.549988</td>\n",
       "      <td>782.520020</td>\n",
       "      <td>782.520020</td>\n",
       "      <td>1585100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2016-11-08</td>\n",
       "      <td>783.400024</td>\n",
       "      <td>795.632996</td>\n",
       "      <td>780.190002</td>\n",
       "      <td>790.510010</td>\n",
       "      <td>790.510010</td>\n",
       "      <td>1350800</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "         Date        Open        High         Low       Close   Adj Close  \\\n",
       "0  2016-11-02  778.200012  781.650024  763.450012  768.700012  768.700012   \n",
       "1  2016-11-03  767.250000  769.950012  759.030029  762.130005  762.130005   \n",
       "2  2016-11-04  750.659973  770.359985  750.560974  762.020020  762.020020   \n",
       "3  2016-11-07  774.500000  785.190002  772.549988  782.520020  782.520020   \n",
       "4  2016-11-08  783.400024  795.632996  780.190002  790.510010  790.510010   \n",
       "\n",
       "    Volume  \n",
       "0  1872400  \n",
       "1  1943200  \n",
       "2  2134800  \n",
       "3  1585100  \n",
       "4  1350800  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.read_csv('../dataset/GOOG-year.csv')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "from collections import deque\n",
    "import random\n",
    "\n",
    "\n",
    "class Agent:\n",
    "    def __init__(self, state_size, window_size, trend, skip, batch_size):\n",
    "        self.state_size = state_size\n",
    "        self.window_size = window_size\n",
    "        self.half_window = window_size // 2\n",
    "        self.trend = trend\n",
    "        self.skip = skip\n",
    "        self.action_size = 3\n",
    "        self.batch_size = batch_size\n",
    "        self.memory = deque(maxlen = 1000)\n",
    "        self.inventory = []\n",
    "\n",
    "        self.gamma = 0.95\n",
    "        self.epsilon = 0.5\n",
    "        self.epsilon_min = 0.01\n",
    "        self.epsilon_decay = 0.999\n",
    "\n",
    "        tf.reset_default_graph()\n",
    "        self.sess = tf.InteractiveSession()\n",
    "        self.X = tf.placeholder(tf.float32, [None, self.state_size])\n",
    "        self.Y = tf.placeholder(tf.float32, [None, self.action_size])\n",
    "        feed = tf.layers.dense(self.X, 512, activation = tf.nn.relu)\n",
    "        tensor_action, tensor_validation = tf.split(feed,2,1)\n",
    "        feed_action = tf.layers.dense(tensor_action, self.action_size)\n",
    "        feed_validation = tf.layers.dense(tensor_validation, 1)\n",
    "        self.logits = feed_validation + tf.subtract(feed_action,tf.reduce_mean(feed_action,axis=1,keep_dims=True))\n",
    "        self.cost = tf.reduce_mean(tf.square(self.Y - self.logits))\n",
    "        self.optimizer = tf.train.GradientDescentOptimizer(1e-5).minimize(\n",
    "            self.cost\n",
    "        )\n",
    "        self.sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    def act(self, state):\n",
    "        if random.random() <= self.epsilon:\n",
    "            return random.randrange(self.action_size)\n",
    "        return np.argmax(\n",
    "            self.sess.run(self.logits, feed_dict = {self.X: state})[0]\n",
    "        )\n",
    "    \n",
    "    def get_state(self, t):\n",
    "        window_size = self.window_size + 1\n",
    "        d = t - window_size + 1\n",
    "        block = self.trend[d : t + 1] if d >= 0 else -d * [self.trend[0]] + self.trend[0 : t + 1]\n",
    "        res = []\n",
    "        for i in range(window_size - 1):\n",
    "            res.append(block[i + 1] - block[i])\n",
    "        return np.array([res])\n",
    "\n",
    "    def replay(self, batch_size):\n",
    "        mini_batch = []\n",
    "        l = len(self.memory)\n",
    "        for i in range(l - batch_size, l):\n",
    "            mini_batch.append(self.memory[i])\n",
    "        replay_size = len(mini_batch)\n",
    "        X = np.empty((replay_size, self.state_size))\n",
    "        Y = np.empty((replay_size, self.action_size))\n",
    "        states = np.array([a[0][0] for a in mini_batch])\n",
    "        new_states = np.array([a[3][0] for a in mini_batch])\n",
    "        Q = self.sess.run(self.logits, feed_dict = {self.X: states})\n",
    "        Q_new = self.sess.run(self.logits, feed_dict = {self.X: new_states})\n",
    "        for i in range(len(mini_batch)):\n",
    "            state, action, reward, next_state, done = mini_batch[i]\n",
    "            target = Q[i]\n",
    "            target[action] = reward\n",
    "            if not done:\n",
    "                target[action] += self.gamma * np.amax(Q_new[i])\n",
    "            X[i] = state\n",
    "            Y[i] = target\n",
    "        cost, _ = self.sess.run(\n",
    "            [self.cost, self.optimizer], feed_dict = {self.X: X, self.Y: Y}\n",
    "        )\n",
    "        if self.epsilon > self.epsilon_min:\n",
    "            self.epsilon *= self.epsilon_decay\n",
    "        return cost\n",
    "    \n",
    "    def buy(self, initial_money):\n",
    "        starting_money = initial_money\n",
    "        states_sell = []\n",
    "        states_buy = []\n",
    "        inventory = []\n",
    "        state = self.get_state(0)\n",
    "        for t in range(0, len(self.trend) - 1, self.skip):\n",
    "            action = self.act(state)\n",
    "            next_state = self.get_state(t + 1)\n",
    "            \n",
    "            if action == 1 and initial_money >= self.trend[t] and t < (len(self.trend) - self.half_window):\n",
    "                inventory.append(self.trend[t])\n",
    "                initial_money -= self.trend[t]\n",
    "                states_buy.append(t)\n",
    "                print('day %d: buy 1 unit at price %f, total balance %f'% (t, self.trend[t], initial_money))\n",
    "                \n",
    "                \n",
    "            elif action == 2 and len(inventory):\n",
    "                bought_price = inventory.pop(0)\n",
    "                initial_money += self.trend[t]\n",
    "                states_sell.append(t)\n",
    "                try:\n",
    "                    invest = ((close[t] - bought_price) / bought_price) * 100\n",
    "                except:\n",
    "                    invest = 0\n",
    "                print(\n",
    "                    'day %d, sell 1 unit at price %f, investment %f %%, total balance %f,'\n",
    "                    % (t, close[t], invest, initial_money)\n",
    "                )\n",
    "            \n",
    "            state = next_state\n",
    "        invest = ((initial_money - starting_money) / starting_money) * 100\n",
    "        total_gains = initial_money - starting_money\n",
    "        return states_buy, states_sell, total_gains, invest\n",
    "        \n",
    "    def train(self, iterations, checkpoint, initial_money):\n",
    "        for i in range(iterations):\n",
    "            total_profit = 0\n",
    "            inventory = []\n",
    "            state = self.get_state(0)\n",
    "            starting_money = initial_money\n",
    "            for t in range(0, len(self.trend) - 1, self.skip):\n",
    "                action = self.act(state)\n",
    "                next_state = self.get_state(t + 1)\n",
    "                \n",
    "                if action == 1 and starting_money >= self.trend[t] and t < (len(self.trend) - self.half_window):\n",
    "                    inventory.append(self.trend[t])\n",
    "                    starting_money -= self.trend[t]\n",
    "                \n",
    "                elif action == 2 and len(inventory) > 0:\n",
    "                    bought_price = inventory.pop(0)\n",
    "                    total_profit += self.trend[t] - bought_price\n",
    "                    starting_money += self.trend[t]\n",
    "                    \n",
    "                invest = ((starting_money - initial_money) / initial_money)\n",
    "                self.memory.append((state, action, invest, \n",
    "                                    next_state, starting_money < initial_money))\n",
    "                state = next_state\n",
    "                batch_size = min(self.batch_size, len(self.memory))\n",
    "                cost = self.replay(batch_size)\n",
    "            if (i+1) % checkpoint == 0:\n",
    "                print('epoch: %d, total rewards: %f.3, cost: %f, total money: %f'%(i + 1, total_profit, cost,\n",
    "                                                                                  starting_money))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-3-28bed545c0f8>:30: calling reduce_mean (from tensorflow.python.ops.math_ops) with keep_dims is deprecated and will be removed in a future version.\n",
      "Instructions for updating:\n",
      "keep_dims is deprecated, use keepdims instead\n",
      "epoch: 10, total rewards: 231.100222.3, cost: 0.499693, total money: 10231.100222\n",
      "epoch: 20, total rewards: 195.875063.3, cost: 0.324152, total money: 10195.875063\n",
      "epoch: 30, total rewards: 219.615054.3, cost: 0.237771, total money: 10219.615054\n",
      "epoch: 40, total rewards: 56.505131.3, cost: 0.183305, total money: 10056.505131\n",
      "epoch: 50, total rewards: 190.745120.3, cost: 0.129967, total money: 10190.745120\n",
      "epoch: 60, total rewards: 165.275088.3, cost: 0.134246, total money: 10165.275088\n",
      "epoch: 70, total rewards: 201.795107.3, cost: 0.075016, total money: 10201.795107\n",
      "epoch: 80, total rewards: 187.545045.3, cost: 0.062454, total money: 10187.545045\n",
      "epoch: 90, total rewards: 206.835023.3, cost: 0.050687, total money: 10206.835023\n",
      "epoch: 100, total rewards: 199.895082.3, cost: 0.041359, total money: 10199.895082\n",
      "epoch: 110, total rewards: 184.405092.3, cost: 0.035289, total money: 10184.405092\n",
      "epoch: 120, total rewards: 242.405092.3, cost: 0.047248, total money: 10242.405092\n",
      "epoch: 130, total rewards: 148.405032.3, cost: 0.050786, total money: 10148.405032\n",
      "epoch: 140, total rewards: 225.724978.3, cost: 0.021171, total money: 10225.724978\n",
      "epoch: 150, total rewards: 168.344972.3, cost: 0.018388, total money: 10168.344972\n",
      "epoch: 160, total rewards: 230.095034.3, cost: 0.199324, total money: 10230.095034\n",
      "epoch: 170, total rewards: 206.275026.3, cost: 0.044696, total money: 10206.275026\n",
      "epoch: 180, total rewards: 364.895023.3, cost: 0.016494, total money: 10364.895023\n",
      "epoch: 190, total rewards: 220.664980.3, cost: 0.014381, total money: 10220.664980\n",
      "epoch: 200, total rewards: 175.284975.3, cost: 0.010883, total money: 10175.284975\n"
     ]
    }
   ],
   "source": [
    "close = df.Close.values.tolist()\n",
    "initial_money = 10000\n",
    "window_size = 30\n",
    "skip = 1\n",
    "batch_size = 32\n",
    "agent = Agent(state_size = window_size, \n",
    "              window_size = window_size, \n",
    "              trend = close, \n",
    "              skip = skip, \n",
    "              batch_size = batch_size)\n",
    "agent.train(iterations = 200, checkpoint = 10, initial_money = initial_money)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "day 7: buy 1 unit at price 754.020020, total balance 9245.979980\n",
      "day 8: buy 1 unit at price 736.080017, total balance 8509.899963\n",
      "day 9, sell 1 unit at price 758.489990, investment 0.592818 %, total balance 9268.389953,\n",
      "day 11: buy 1 unit at price 771.229980, total balance 8497.159973\n",
      "day 12, sell 1 unit at price 760.539978, investment 3.323003 %, total balance 9257.699951,\n",
      "day 14, sell 1 unit at price 768.270020, investment -0.383797 %, total balance 10025.969971,\n",
      "day 22: buy 1 unit at price 762.520020, total balance 9263.449951\n",
      "day 24, sell 1 unit at price 771.190002, investment 1.137017 %, total balance 10034.639953,\n",
      "day 28: buy 1 unit at price 796.099976, total balance 9238.539977\n",
      "day 29: buy 1 unit at price 797.070007, total balance 8441.469970\n",
      "day 31, sell 1 unit at price 790.799988, investment -0.665744 %, total balance 9232.269958,\n",
      "day 32: buy 1 unit at price 794.200012, total balance 8438.069946\n",
      "day 33: buy 1 unit at price 796.419983, total balance 7641.649963\n",
      "day 37, sell 1 unit at price 791.549988, investment -0.692539 %, total balance 8433.199951,\n",
      "day 39, sell 1 unit at price 782.789978, investment -1.436670 %, total balance 9215.989929,\n",
      "day 41, sell 1 unit at price 786.140015, investment -1.290772 %, total balance 10002.129944,\n",
      "day 48: buy 1 unit at price 806.359985, total balance 9195.769959\n",
      "day 49: buy 1 unit at price 807.880005, total balance 8387.889954\n",
      "day 50, sell 1 unit at price 804.609985, investment -0.217025 %, total balance 9192.499939,\n",
      "day 52: buy 1 unit at price 802.174988, total balance 8390.324951\n",
      "day 53, sell 1 unit at price 805.020020, investment -0.354011 %, total balance 9195.344971,\n",
      "day 56, sell 1 unit at price 835.669983, investment 4.175522 %, total balance 10031.014954,\n",
      "day 67: buy 1 unit at price 809.559998, total balance 9221.454956\n",
      "day 68: buy 1 unit at price 813.669983, total balance 8407.784973\n",
      "day 69, sell 1 unit at price 819.239990, investment 1.195710 %, total balance 9227.024963,\n",
      "day 71: buy 1 unit at price 818.979980, total balance 8408.044983\n",
      "day 72, sell 1 unit at price 824.159973, investment 1.289219 %, total balance 9232.204956,\n",
      "day 76: buy 1 unit at price 831.330017, total balance 8400.874939\n",
      "day 77, sell 1 unit at price 828.640015, investment 1.179520 %, total balance 9229.514954,\n",
      "day 78: buy 1 unit at price 829.280029, total balance 8400.234925\n",
      "day 79, sell 1 unit at price 823.210022, investment -0.976747 %, total balance 9223.444947,\n",
      "day 80: buy 1 unit at price 835.239990, total balance 8388.204957\n",
      "day 81, sell 1 unit at price 830.630005, investment 0.162789 %, total balance 9218.834962,\n",
      "day 83, sell 1 unit at price 827.780029, investment -0.893152 %, total balance 10046.614991,\n",
      "day 88: buy 1 unit at price 845.539978, total balance 9201.075013\n",
      "day 89, sell 1 unit at price 845.619995, investment 0.009463 %, total balance 10046.695008,\n",
      "day 91: buy 1 unit at price 848.780029, total balance 9197.914979\n",
      "day 92: buy 1 unit at price 852.119995, total balance 8345.794984\n",
      "day 93: buy 1 unit at price 848.400024, total balance 7497.394960\n",
      "day 96, sell 1 unit at price 817.580017, investment -3.675865 %, total balance 8314.974977,\n",
      "day 97: buy 1 unit at price 814.429993, total balance 7500.544984\n",
      "day 100, sell 1 unit at price 831.409973, investment -2.430411 %, total balance 8331.954957,\n",
      "day 101, sell 1 unit at price 831.500000, investment -1.991988 %, total balance 9163.454957,\n",
      "day 103, sell 1 unit at price 838.549988, investment 2.961580 %, total balance 10002.004945,\n",
      "day 104: buy 1 unit at price 834.570007, total balance 9167.434938\n",
      "day 105: buy 1 unit at price 831.409973, total balance 8336.024965\n",
      "day 106, sell 1 unit at price 827.880005, investment -0.801611 %, total balance 9163.904970,\n",
      "day 107: buy 1 unit at price 824.669983, total balance 8339.234987\n",
      "day 108: buy 1 unit at price 824.729980, total balance 7514.505007\n",
      "day 110: buy 1 unit at price 824.320007, total balance 6690.185000\n",
      "day 111: buy 1 unit at price 823.559998, total balance 5866.625002\n",
      "day 112, sell 1 unit at price 837.169983, investment 0.692800 %, total balance 6703.794985,\n",
      "day 113, sell 1 unit at price 836.820007, investment 1.473320 %, total balance 7540.614992,\n",
      "day 114, sell 1 unit at price 838.210022, investment 1.634479 %, total balance 8378.825014,\n",
      "day 115, sell 1 unit at price 841.650024, investment 2.102341 %, total balance 9220.475038,\n",
      "day 116, sell 1 unit at price 843.190002, investment 2.383555 %, total balance 10063.665040,\n",
      "day 122: buy 1 unit at price 912.570007, total balance 9151.095033\n",
      "day 123, sell 1 unit at price 916.440002, investment 0.424077 %, total balance 10067.535035,\n",
      "day 125: buy 1 unit at price 931.659973, total balance 9135.875062\n",
      "day 126, sell 1 unit at price 927.130005, investment -0.486225 %, total balance 10063.005067,\n",
      "day 144: buy 1 unit at price 966.950012, total balance 9096.055055\n",
      "day 145, sell 1 unit at price 975.599976, investment 0.894562 %, total balance 10071.655031,\n",
      "day 146: buy 1 unit at price 983.679993, total balance 9087.975038\n",
      "day 148: buy 1 unit at price 980.940002, total balance 8107.035036\n",
      "day 149, sell 1 unit at price 983.409973, investment -0.027450 %, total balance 9090.445009,\n",
      "day 151, sell 1 unit at price 942.900024, investment -3.877911 %, total balance 10033.345033,\n",
      "day 155: buy 1 unit at price 939.780029, total balance 9093.565004\n",
      "day 157, sell 1 unit at price 950.630005, investment 1.154523 %, total balance 10044.195009,\n",
      "day 160: buy 1 unit at price 965.590027, total balance 9078.604982\n",
      "day 161, sell 1 unit at price 952.270020, investment -1.379468 %, total balance 10030.875002,\n",
      "day 164: buy 1 unit at price 917.789978, total balance 9113.085024\n",
      "day 166, sell 1 unit at price 898.700012, investment -2.079993 %, total balance 10011.785036,\n",
      "day 168: buy 1 unit at price 906.690002, total balance 9105.095034\n",
      "day 171: buy 1 unit at price 930.090027, total balance 8175.005007\n",
      "day 172, sell 1 unit at price 943.830017, investment 4.096220 %, total balance 9118.835024,\n",
      "day 173, sell 1 unit at price 947.159973, investment 1.835300 %, total balance 10065.994997,\n",
      "day 176: buy 1 unit at price 965.400024, total balance 9100.594973\n",
      "day 179, sell 1 unit at price 972.919983, investment 0.778947 %, total balance 10073.514956,\n",
      "day 180: buy 1 unit at price 980.340027, total balance 9093.174929\n",
      "day 181, sell 1 unit at price 950.700012, investment -3.023442 %, total balance 10043.874941,\n",
      "day 194: buy 1 unit at price 914.390015, total balance 9129.484926\n",
      "day 195, sell 1 unit at price 922.669983, investment 0.905518 %, total balance 10052.154909,\n",
      "day 197: buy 1 unit at price 926.960022, total balance 9125.194887\n",
      "day 199: buy 1 unit at price 910.669983, total balance 8214.524904\n",
      "day 201, sell 1 unit at price 924.690002, investment -0.244889 %, total balance 9139.214906,\n",
      "day 202, sell 1 unit at price 927.000000, investment 1.793187 %, total balance 10066.214906,\n",
      "day 208: buy 1 unit at price 939.330017, total balance 9126.884889\n",
      "day 211, sell 1 unit at price 927.809998, investment -1.226408 %, total balance 10054.694887,\n",
      "day 214: buy 1 unit at price 929.080017, total balance 9125.614870\n",
      "day 216, sell 1 unit at price 935.090027, investment 0.646878 %, total balance 10060.704897,\n",
      "day 219: buy 1 unit at price 915.000000, total balance 9145.704897\n",
      "day 221: buy 1 unit at price 931.580017, total balance 8214.124880\n",
      "day 222, sell 1 unit at price 932.450012, investment 1.907105 %, total balance 9146.574892,\n",
      "day 223, sell 1 unit at price 928.530029, investment -0.327399 %, total balance 10075.104921,\n",
      "day 224: buy 1 unit at price 920.969971, total balance 9154.134950\n",
      "day 226: buy 1 unit at price 944.489990, total balance 8209.644960\n",
      "day 227: buy 1 unit at price 949.500000, total balance 7260.144960\n",
      "day 228, sell 1 unit at price 959.109985, investment 4.141287 %, total balance 8219.254945,\n",
      "day 229, sell 1 unit at price 953.270020, investment 0.929605 %, total balance 9172.524965,\n",
      "day 230: buy 1 unit at price 957.789978, total balance 8214.734987\n",
      "day 231: buy 1 unit at price 951.679993, total balance 7263.054994\n",
      "day 232, sell 1 unit at price 969.960022, investment 2.154821 %, total balance 8233.015016,\n",
      "day 233, sell 1 unit at price 978.890015, investment 2.202992 %, total balance 9211.905031,\n",
      "day 234, sell 1 unit at price 977.000000, investment 2.660559 %, total balance 10188.905031,\n"
     ]
    }
   ],
   "source": [
    "states_buy, states_sell, total_gains, invest = agent.buy(initial_money = initial_money)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA34AAAFBCAYAAAAomn1FAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvOIA7rQAAIABJREFUeJzs3Xd4FVX6wPHv3JIe0kMJvR2aSBUbir2AYGFFXQu6yrroiq5lbWtZu79117Ws3bWgiKICirrYURQVEEEghyYtJCGE9HKTW35/zNxw0296ez/P40NyZ+bMmckk3ve+57zH8Pl8CCGEEEIIIYTovGxt3QEhhBBCCCGEEC1LAj8hhBBCCCGE6OQk8BNCCCGEEEKITk4CPyGEEEIIIYTo5CTwE0IIIYQQQohOTgI/IYQQQgghhOjkJPATQohaKKVeUUrd3wLtTlZK6eZuV7RvSqmdSqmTa9n2rFLqb63dJyGEEF2Ho607IIQQjaWU2glcqbX+rCX2byla628A1dztKqXuA84GhgP3a63vqbL9z8BfgARgC3C91vpba1so8G/gHMAJrASu1lqn1XKus4CHgP7Aesz7uilg+w3AX4EIYBHwJ621y9q2E+gOeKzdv9NanxrksV8Co4BQ4DfgLq31EmtbT+A5YALQExigtd4Z5L3rb7Xn1Fq7m3v/+mitr25qG02hlPoKmK+1frENzj3FOnfvOvY5AbgLGAfkaK3719Pm+cC9QG9gD3C71nqxtc0A7gMuB6KAn4FrtNYbre0pwH+AyUAx5u/SswFtjwFewvw92wz8QWu9ztp2D3AH4Arozmit9Y4gjr0IeMw69nKt9ZfW64OA14HJWmsPQgjRSJLxE0KIzmMbcAuwrOoGpdQk4GFgJhCD+ebzfaWU3dplHnAUMBroBeQAT9Z0EqXUEOAN4GogFvgAWKqUcljbTwNuBU4C+gEDMd+EBzpLax1l/RcY9NV37Dygp9a6GzAHmG8FfABe4BPgvNpvkeigioCXgZvr29EK3OZjfsjRzTrmTaVUsrXL74ArMAO7eOB7zMDKbz5mUN8dmAo8aAWeKKVCgCXWPnHAq8AS63W/hQHPdlRA0FfrsdbvzsOYge21VP7dewK4QYI+IURTScZPCNEhKaVeB/oCHyilPMDftdaPKqWmY2aiUoB1mNmizXXs/w7mG8Bw4Bdr/41BnN8OPApcBhRgflL/JFYGSCl1OWYQ1hvIAh7RWj9nHTuFgAyHlQF7CrgUM9j5BLhMa12qlEoEXgGOxQxsNgLHa629VfuktX7Vau/3NXS5P7BRa73G2uc1zKxGMpAODAD+p7XOtLYvBP5Zy+WfBnwTkC18BDMbczzwuXVPXgrIoNyHGSjeWkt7geo8Vmu9PmBfH2Z2sg+QbvX9P/4AtIFWWP/mKqUATgF+AG4HrsJ8Pj4B/qy1zqtl//3AC8DhVt/+h5lJyq3v5EqpV4C9Wus7/c8H8C/MzKcHM2P1XyuAXwKk+AMBpdQ5wL1a69FKKRvmc3cVZlD+OWbm9qBSKgx4ETgDsANbgWnAdZi/A0cqpR4HXtFaX6uU8gHXADcAPYDHMZ/F1zGzrp8AF2uty6x+TAPux3zWNlnnXW9t20kNz7jVj4+BUKVUoXU7hmqt9wXeH631j8CPtQ2VraI3kKu1/tj6fplSqggYhPkzGgB8GxCQzbeuEaVUFDAFOF9rXQ78opRahBkofmltcwCPa619wBNKqZuAE61rqktdx/4MpGmt05VSn2F+4IFSaqb1+g9BXLcQQtRJMn5CiA5Ja30JsJtDmaNHlVJDgQXA9UAS8BFmoBdS0/5WUx8DQzADoLWYQUYwrsJ8Az0G81P6s6ts34/5prob5pCyfymlxtXR3vnA6ZhvSkcDs63XbwT2WtfTHTMQ8QXZx0AfA3al1CQraL0CMzDOsLa/BByjlOqllIoAfm8dUxujytcGZjAAMBIziPb7BeiulEoIeO0NpVSWUmq5UurwgNfrPVYp9aFSqhQzMPsKWF1HP4N1nPVvrPV8fI/5M5gNnID5RjwKM3ipbX8D80OHXphD+foA9zSyPz0wM7MpwB+Ap5VScVYAUIQZLPhdBLxpff1nzGfxeA5lbp+2tl1mtdkHc7jv1UCJ1voO4BvgWutarg1o+zRgPHAkZkD5PHCx1cYo4EIApdRYzIzcH622n8PMAocGtFXtGddaF2H+Hu0LyJBVCvoaYTWwWSk1XSllV0qdjTl80v+hwVvAIKXUUKWU07ov/qDNqPKv/+vAZ3u9Fbj5rbde9ztLKXVQKbVRKfWngNfrOjYLSFBK9cb8EGGjUioauBO4raE3QAghaiIZPyFEZzILWKa1/hRAKfUPzKGBR2MGCNVorV/2f23Nz8lRSsVYWZ26nA/8W2u91zr2Yczhif52A4dbfq2UWo6ZVVlbS3tP+N/wKqU+wAwoAcox56v101pvw3yD3hgFwLvAt5hvZHOBMwLehG7FnAuVhplh2oA55KwmnwGPWJmp7zCzUiGYc/LADJAC75//62ggGzOoXGv1Yx7wP6XUMCszVt+xaK2nWW/YTwaG15T9bCa/B/4ZkBm6DfjVyuZWY/18tlnfZiml/gnc3chzl2Nmpd3AR1Y2TAGrMD/cuBD41AoOzgRuso67GjOA8z+X9wC7lVKXWG0mAIOtTNyaIPrxqNY6HzMQ+RVYHnA/PgbGYg5ZnAM8F5CZelUpdTtmwPi19Vptz3iz0lp7rIz2m0AYUAb8zgoywcxwfwtozGd9D1YgrbUuUEqtBP6mlLoZGIE5dDjLOrbq84n1fbT19duYwXEmMAl4VymVq7VeUNexWmuvFSQuwgxSr8Ic4vwkMFopdZd1HTdqrX9t9M0RQnRpEvgJITqTXsAu/zfWm6k9mFmTaqzM1wOYc36SMIdSAiRS/Q1aTefaE/B94Ncopc7AfNM/FHN0RQRmMFWbjICvi632Af4PM2u03BpS+LzW+uF6+laTP2BmHkdiBienAh8qpcZab8afxiyYkoCZUboFM+M3qWpDWutUpdRlmNmvnpjDEjdhZiYBCjEznX7+rwus41cGbHvIamsy5lzBOo8N6EM58LFSap5SapvWemmQ96EhKj1P1tcOzMxrNUqp7pgFciZjBgI2zIxbY2RXKRpTjBk4gBnQfGcFCucCa7XW/n72w5y7GRgMe6w+v46ZqXtLKRWL+XO7w7qXtckM+Lqkhu97BJz3MmUWEPIL4dBzDLU/483KGg76KObQyrWYGculSqkzrEIqdwETMe9FBmYG8wul1EitdTFmwP805u/0Dsz75M/oVX0+sb73P9ubAl7/Tin1b8x5tQuCOPZzzKG5WFnwCZjzE3diDvXugzlU98iG3xUhhJChnkKIjq3qkMd9mG9AgYrqfX0ws1g17X8RMAMzcxSDOTcJKg/zqk065lwivz4B5w3FzK79A+iutY7FHHYaTLuVaK0LtNY3aq0HAtOBvyilTqrvuBqMAT7UWm/RWnu11p9Y13B0wPZXtNYHtVlB80ngCGuOYU39WqS1HqW1TsAMcPsDP1mbN2LOc/M7HMjUWmfX0jcfh+5NQ491YM7daqqahs9Wep4w54i6MYOfmvZ/0Hr9MKv4zMU04mdeHyu42IU5RDJwmCeYwcoZWuvYgP/CtNZpWutyrfW9WusRmD/3aZhz7qjlehpiD/BAlfNGWJmu+jT13FWNAVZorVdbz/pPmMOCTw7YvlBrvVdr7dZav4JZbGUEgNZ6l9Z6mtY6SWs9CfODoB+tYzdiZuACf66jrddrUvXZrvdYa/tTmHMvEwG7Fdj/ZO0vhBCNIhk/IURHlolVBMHyNnCrFRitwBxG6MIcjljT/tHW9mzMjNyDDTj328A8pdQyzAzZXwO2hWBmz7IAt5X9OxVo8BAtq2BGKrAdMwvp4VBmsuq+TsxiGTbAYRXzKLeKgPwE3KGUehKzYuHJmNlIf59+Ai5VZln/YmAu5ryrA7WcazzmHMF4zOzIUq11qrX5NeAVpdQbmMHTnZhFQVBK9cUMkn+y+vlnzDe3K4M4dhjm/LCvMAOwWZhz7W4J6FeYdQ/ALBgSprUutbbdA0zRWk+p4ZKyMO/rQMylLsDM0vzVGtKYhfl8LNRm8Z6a9o/G/BnlKbOyZL0VKJvgTczn+0jMDJXfs8ADSqnLtNa7lFJJwNFa6yXKrEx5ADM7m4859NP/LFX93WioFzAzjZ9hBkkRmBm3FVrrgroOtM6dUNcQa6toTQhmMR/D+jl7/YVlqvgJ8+/AGK31Omv+4WTMYkb+7b9TSr2F+XP9vdXuNutcwzGz1y7MId2nYs7ZBPPZ8wDXKaWexRySCfCFdewMzL89uZhZxesw5+XWe2yAKzGzuOuUWagoXCk1AvODhx013R8hhAiGZPyEEB3ZQ8CdSqlcpdRNWmuNmWV5EvMN7lmYxVzKatofM8jYhZkR3IQ5fypYLwDLMYsz/IyZ0XMDHuuN7nWYwWEOZlamsUMRh2DOqSvELDv/H22t71VLn0ow53/dYX19ibXtNcyiFl9hvul/AvhjQLB2E1CKOdcvC3Pe2Dn+hpVSH1tztvz+jfnmVlvX6H8Ti5VNfBSzCuJuzHvsn+sWDTxjHZOGWezjDH9Gr55jDcxhr/utPs4DZmmtA+dNllj3CsyAuSRgWx8OBZiVWEP8HgBWWs/HkZjFSl7HfCP/m3V//lzH/vdiFvrJw1xS472aztVMFmAWcPmiSnD+b8xnbblSqgDzmfYP1+2BOYcsH3MNua85tIzBv4GZSqkcpdQTDe2M1no15jPwFObPdhuHChTVd2yqdT07rHtZ0xDQ4zB/lh9hBkAlmL9/AFiFVH5vtfc15nOyyLoH7wIPaq39+z+CWTRoHeYzfANwnj5UffU0zAArB3PO5Ola6yyr7TLM4jmXWsdeAZwd8DfmAuvaCzB/5x7RVrXdII7FyrDPA/5mHePGnGv7BWZQHziUVgghGsTw+Zp7hIUQQnQ9VlbvWa11v3p3Fm1CKbUOOKmOYaNCCCFEpyWBnxBCNIJSKhyzzP9yzMIZ7wKrtNbXt2nHhBBCCCFqIEM9hRCicQzMoX05mEM9N2NWCxRCCCGEaHck4yeEEEIIIYQQnZxk/IQQQgghhBCik+uIyzmEYpZITscsiyyEEEIIIYQQXYkd6Im5RI0rmAM6YuA3EfimrTshhBBCCCGEEG1sMvBtMDt2xMAvHSAnpwivt33NT0xIiCI7u7D+HYVoIHm2REuS50u0FHm2REuS50u0pPb+fNlsBnFxkWDFRsHoiIGfB8Dr9bW7wA9ol30SnYM8W6IlyfMlWoo8W6IlyfMlWlIHeb6CnvomxV2EEEIIIYQQopOTwE8IIYQQQgghOrmOONSzRh6Pm5ycLNzusjbrw/79Nrxeb5udvyOz2eyEh0cRFRWDYRht3R0hhBBCCCE6lU4T+OXkZBEWFkFkZI82CxwcDhtutwR+DeXz+fB43BQU5JKTk0V8fHJbd0kIIYQQQohOpdMM9XS7y4iM7CbZog7IMAwcDiexsQmUlZW2dXeEEEIIIYTodDpN4AdI0NfBGYYN6BDVk4QQQgghhOhQOlXg11hFhS4Wv7GO4sK2mx8ohBBCCCGEEC1FAj9gzcpdpO/JY/XKXc3W5rHHTqC4uLjZ2nvxxWf5/PPlzdZebVJTN3HvvXe2WPsfffQBd955S4u1L4QQQgghRHPxlJTg6yTFG7t84FdU6CJ1QyYAqRsy2m3W78orr+akk05t8fMMGzaCu+++v8XPI4QQQgghRHtWsnUL2+ddQ84nH7V1V5pFp6nq2VhrVu7C5zPnlfl8Plav3MVxpw1plrYXLHidb775GperlD/+8RqmTDmJ9PR9XHnlJSxb9jlApe8fe+wRevbsyUUXXQrAli2p3H337bz55rs8+OC9DBs2nPPOm8VLLz3H7t27KCoqZN++NFJSenPffY8QFhZGYWEhDz10L7/9toOkpGQSE5OIi4vn2muvr9S30tJS7r//bnbu3IHd7qBv337cd9/DrF27mqef/jcvvfQ6AO++u5B33nmLqKhojjrqGN57722WLfu8ot/Tp5/LqlUrKS0t5dZb7+Lww8fgdru55ZbrycvLw+VyMWLESG6++XacTmez3FchhBBCCCFa2sHln4DXC0bnyJV1jqtoJH+2z+sxAz+vx9esWT+bzcYrr7zJI4/8k0cffZCcnIN17n/eeeezZMl7FYHou+++zTnn/K7GojVab+buux/gjTcW4Xa7Wb78YwD++98XiI7uxptvvst99z3M+vXrajzXDz98T3FxEfPnv8Orry7g5ptvr7bPtm1bef31V3jmmZd58cXXKCgoqLQ9Ly+PUaNG89//vsnll1/Fs88+AYDdbufuu+/npZde5/XXF+LxeFi2bEn9N0wIIYQQQoh2wJV9kKJf1oHdTrejj27r7jSLLh34BWb7/PxZv+YwbdoMAPr27c/QoYqNGzfUuX///gPo1SuFVau+Iz8/n5UrV3DmmWfVuO8RRxxJdHQ0hmEwYsQo0tL2AvDzz6srjunWLYbJk4+v8fjBg4ewc+dvPPbYI3zxxWeEhIRU2+fnn9dw1FHHEBcXB8DUqdMrbQ8Pj+CYYyYDMHLkYaSlpQHg9XpZsGA+s2dfxGWXXcDatavZunVLndcuhBBCCCFEe7H/8y/A6yVqzFgcMbFt3Z1m0WUDv6rZPr/mzvpVZbfb8XoPnbOsrPJ5Zs68gPffX8SyZUs57rgTiIqKqrGdkJDQiq9tNhsej6dB/UhJ6c38+W8zceIkVq/+gdmzL8TlcjWojZCQQ0M3zT64Afj0009Yv34d//nPC7z22kLOOWdmtesUQgghhBCiPfJ5vWQu/xSAmOOmtG1nmlGXDfxqyvb5NVfWb9mypQDs2bObrVs1I0ceRnx8Am63m7179wBmkBToqKOOYffuXSxc+Abnnnt+g885dux4PvlkGQAFBQV8882KGvfbvz8Tm83OccdN4brrbiQ3N4eCgvxK+4wZM45Vq74jNzcXgE8++TCoPhQWFhATE0tERCSFhYXVrlEIIYQQQoi2VJaRzp5/PELO55/iq5JAKfp1A66sAziTkogYPqKNetj8umRxl9qyfX7+rN+EY/oREVV9CGSwPB4Pl19+EaWlpdx88+3ExcUDMG/ejdxwwzXExsZy1FHHVjrGZrNxxhlTWbXqOwYPbniRmdmzr+LBB+/loovOIyEhkWHDhteYNdy+fRvPPvsUAF6vh4svnk1iYhK7dx8KeIcMGcpFF13K1VdfTkREJBMmTCQysuYMZKDTT5/GN9+s4KKLziMuLp7DDx/b4GyiEEIIIYQQLaVw7RpKUjdTkrqZ/JXfknzxpYQPHARA3oqvAIiZfDyGrfPkyYzasl7tWH/gt+zswkpDJjMydtGjR7+gGljxvy1sXp9Ra+AHYLMbDB/ds0EVPh0OG25309f5uP76uUyffi4nnnhyg491u914PB5CQ0MpKipk7twrufbaG5g4cVKj+lJcXERERCQAL730HGlpe7nrrvsa1VYwGvJz7EqSkqLJyiqof0chGkGeL9FS5NkSLUmeL9EUWW+/Rc7yT8AwwIqHHAkJOJOSKdmiMQyDAY/+E0dMTBv3tGY2m0FCQhTAAGBnMMd0yYxfRlp+nUEfmFm/jLS8VuqRKTV1E3fddRtDhyqmTDmxUW0UFORz443X4fV6KStzccoppzc66AN45pmn2LDhF9zucnr1SuGWW+5odFtCCCGEEEK0B55C80ODpAsuwpOXR87yT3BnZ+POzgYg4dhj2m3Q11hdMvA7/4oJbd2FGg0bNoK3327asgdxcfG8/PL8ZuoR3HjjX5utLSGEEEIIIdoDT2EhAM74BOJOOoWE6WdTnn2A8qwsPPn59D3hGHI72UylLhn4CSGEEEIIIbouT1ERAHarFobhcBDSvQch3XsA4OwWDZ1sKHHnma0ohBBCCCGEEEHwD/W017J0WmckgZ8QQgghhBCiS/EP9bR1ocCvSw71nDXrbLROrXc/pYaxcOHiVuiREEIIIYQQojX4vF68xcVgGNit6vVdQZfM+I0ePQan01nnPk6nk8MPH9tKPRJCCCGEEEK0Bm9REfh82MIjMOz2tu5Oq+mSgd+cOXOx1bMYo81mY86cua3UI/joow+4885bAFi7djV/+MMlABw4kMWf//zHVunDww/fxy+//Nxi7c+ceRY7dmxrsfaFEEIIIYSoT8X8vuiuM8wTumjgl5SUzPTp59Sa9XM6ncyYcS6JiUmt3LPqEhOTePLJ51rlXLfe+jfJcgohhBBCiE7NU2hV9IzsWoFfl5zjB2bWb+nS92vc1tRsX2lpKffffzc7d+7AbnfQt28/7rvvYQA+/vhD3nvvHTweD1FRUdx006307du/1rbS0/dx5ZWXsGzZ5wAce+wE5syZy4oVX5GXl8c111zHlCknAfDVV5/z/PP/ITQ0lBNOOJnnn/8Py5evICIiolKb33zzFS+88Aw2mx2Px80NN9zCuHETuPbaOVx44SUcc8xksrL2c//9d5OdnU1KSgo+H0yadCTnnTeLBx64h5CQEPbs2c3+/ZmMHHkYd955L4ZhsHz5J7zzzgLc7nIArrnmeiZMOKLR91IIIYQQQojm1BUrekIXDvz8Wb/Fi9+lvLy84vXmyPb98MP3FBcXMX/+OwDk5+cD8MsvP/PFF5/y9NMvEBISwvffr+Shh/7OM8+83KD2IyMjefHF11i/fh133XUbU6acxMGD2Tz66IM899x/6dOnLwsXvlHr8S+++By33HIHo0aNxuPxUFpaUm2fxx//P8aOHc/s2VeSkZHOpZdewKRJR1Zs37FjO48//h9sNhuXX/57Vq/+gYkTj2TSpCM55ZTTMAyD3bt3Mm/eXN5//6MGXZ8QQgghhBAtxVNkVvSUwK8KpdQ/gPOA/sBhWutfrdeHAq8CCUA2cKnWemtTtrW2mrJ+zTG3b/DgIezc+RuPPfYIY8eO5+ijjwVg5coVbNu2lTlzZgPg8/koKMhvcPsnnXQaACNHHsaBA1m4XC42bfqVoUMVffr0BWDq1Bk8+eS/ajx+/PgJPPHEP5ky5USOPPJoBg4cXG2ftWvXcP31NwPQo0dPxo+fWGn75MlTCA0NBUApRVraXiZOhLS0vdxzzx1kZWXhcDg4eDCb7OwDJCQkNvg6hRBCCCGEaG6eAivw62JDPYOZ47cYOA7YVeX1Z4GntdZDgaeB55phW6uqOtevueb2paT0Zv78t5k4cRKrV//A7NkX4nK58Plg6tTpvPLKm7zyypu8+uoC3ntvWYPbDwkJAcBuVSHyeDwNOv66627kr3+9E4fDyd/+dmutQ17rEhoaUvG1OWTU7MM999zBOef8jvnz3+bll+djt9spKytrcPtCCCGEEEK0hIqMX3R0G/ekddUb+Gmtv9Va7wl8TSmVDIwDFlgvLQDGKaWSGrut6ZfSOIEVPpurkuf+/ZnYbHaOO24K1113I7m5ORQU5HPMMZP55JNl7N+fCZgBW2rq5iafD2DEiFFs2aJJS9sLmHMJa7N7904GDRrM+edfyKmnnsHmzZuq7TN27PiKNjIzM1i79qeg+lFYWEjPnr0AWLZsqQR9QgghhBCiXfHP8bN1sYxfY+f49QHStNYeAK21Rym1z3rdaOS2rKZdSuP4s36LFi1stkqe27dv49lnnwLA6/Vw8cWzSUxMIjExiTlz5nLrrX/B4/HidpdzwgknM2zY8CafMz4+gZtuuo2bbrqOsLAwjj56Mg6Hg7CwsGr7PvPMU+zduxu73UFUVBS33XZXtX3mzbuR+++/m+XLP6FXr14MHz6SyCB+Oa677i/cfvtNREdHM2nS0cTExDT52oQQQgghhGgunsKuOcfP8Pl8Qe2olNoJTNNa/6qUGg+8prUeGbB9E3AxZnDX4G1a67VB9rk/8FvVFzdu3ESvXv2CbKKyrKz93HTTDTz22OPtYgmHxioqKiIyMhKADz9cwtKlS3j++YYVjvErLS3F4XDgcDg4cCCLyy+/hKeeepZ+/fo3Y4+r27dvFyNHjmjRcwghhBBCiK5r/a13ULA5lVEP/J2YUSPrP6B9GwDsDGbHxmb89gApSim7lbWzA72s141GbmuQ7OxCvN5DQavX68Xt9jbqYuLiEnnppdcBGt0GgMNha9LxTfXWW2/y5Zef4/G46dYthltuuaPR/dm5cxf33383Pp8Pj8fN5ZdfRUpK3xa/Pq/XS1ZWQYueoyNKSoqW+yJajDxfoqXIsyVakjxforFcOXkAFLjtlNXyDLX358tmM0hIaFjGslGBn9Z6v1JqHXAhMN/692etdRZAY7eJprnssj9w2WV/aJa2Bg8ewiuvvNksbQkhhBBCCNFeHFrOIbKNe9K6glnO4QngXKAH8JlSKtsaqnk18KpS6i4gB7g04LDGbmsSn8+HYRjN1ZxoZT6fFzMpLIQQQgghRPPzeb2H5vhJcZfKtNbXAdfV8HoqMKmWYxq1rSkcjhCKivKJjOwmwV8H4x9OWlCQQ0hI9WI0QgghhBCia/L5fLhzcvCVuQjp0bPJ7XlLSsDnwxYejuFo7Ky3jqnTXG1cXBI5OVkUFua2WR9sNhteb9vN8evIbDY74eFRREVJFVAhhBBCiK6oZOtWCtauxltSjLe0FE9+Pq69e/EWFwHQ67obiBp9eJPO4V/Koatl+6ATBX52u4PExKZ/CtAU7X0SqBBCCCGEEO2Nt7SErEXvkPfVFzVuN5xOfOXl5Cz/pBkCP3OYp62LLeUAnSjwE0IIIYQQQrRP3vIyvKWlOKK7Vbzm8/koWreW/QvexH0wG+x2Yk88mZCePbGFhWGPjCKkVwq20BB23PwXSlI340pLIzQlpdH96Kpr+IEEfkIIIYQQQogWlv78sxT9vJbwoYqY40/AHhVF9uL3KP1tBwCh/frTY/YVhPbpW+Px3Y48mryvvyT3i8/ofsllAPjcblx7dhParz+GzRZUPyTwE0IIIYSoQ1Ghi0+XbObUGSOIiAoBYNasszFrttVNqWEsXLi4pbsohGinfG43xRvWA1CyRVOyRVdss0d3I37qWcSecCKG3V5rG7Ennkze11+S//1KEs+biWF3kPbvf1KyRdNtH7o+AAAgAElEQVTzT9cQPX5iUH2pmOPXBQO/4EJjIYQQQnRpa1buIn1PHqtX7qp4bfToMTidzjqPczqdHH742JbunhCiHXPt2Y3P7caZlEzyxZcS2rcfjrh4Es+dyYCH/4+4k0+pM+gDCE1JIXzYcHxlZeR9/TX7nnmqIoAs2bo16L54i8xCMfao6MZfUAclGT8hhBBC1Kmo0EXqhkwAUjdkMOGYfkREhTBnzlyWLHm/zmNtNhtz5sxtjW52WTVlY4VoT/zDOcMHDyF2yonETjmxUe3EnngyJambOfDu2+YLNht4vbj27gm6ja5c1VMyfkIIIYSo05qVu/B5fYBZjMGf9UtKSmbiuBOx2Wr+pD4kJIQZM84lMTGp1fraFdWUjRWiPSmxAr+wAQOa1E7U4WNwxCcAYAsPp9fcPwPg2rsHn88XVBsVc/yiu17gJxk/IYQQQtTKn+3zWoGf1+OryPr58DG414msMj4DPNWOlWxfy6stGytES2ro/N7SHVbgN3BQk85r2O0kzvwdOR9/RPLvLyFs0GBsEZF4Cwvx5OXiiI2rt42KwK8LZvwk8BNCCCFErcxsn7fSa4eyfj4iwmNQA44idcdKvN5DwZ/T6WTWrFmS7Wtha1buqsh0+H8ux502pI17JTq70aPHsGPHdsrLy+vcT+tUxowZBkD/iEje792nyefudsSRdDviyIrvQ3v3pmSLxrV3T8MCvy5Y3EUCPyGEEEIAwX+KnxDbm/O5CwMzAzhu5DT0b98TmPWz2Wxcf/31LddZcSgb66mejZWsn2hJc+bMZenSuuf3BnIYBsN79sJwNH/oEdq7jxn47dlL5KjR9e7vn+Nn64LFXWSOnxBCCCGA4Kp02mx2uicOwuvx4bECjkgr6+ef6+ew2Zgx41ySk5NbvM9dWWC2zy9wDqYQLSUpKZnp08+p9++Fnw247IxpLdKXUCuLGEyBF5/Ph6eiqmdki/SnPZPATwghhBCA+Sm+rZ5FkA3DxviRU6u9Pm7kNAzDPNaGIXP7WljVbJ+fP+tXXFjWRj0TXUUwfy/A/CBoSmIyvQ6rPxvXGCENCPy8paXg8WCEhmJzdr2suAz1FEIIIQRw6FP8xYvfrXHujs1mRw04mojwmGrb/Fm/Tdu+YUyfUTK3r5k1aBju1Ltkrp9ocRV/L95bRLnHXet+NmBmrxTCBjStsEttQlNSwDAoy0jH53bXOZy0Ky/lAJLxE0IIIbqkvBVfk/78s3hdrkqv1/Upfm3ZPr9xI6fRM2kww0fPojA7v1n729U1dBiuZP1Ea5gzZy4GtS+j4HQ4mZKQRHxcPM6klvkwyBYaijM5GTweytLT69zX24ULu4AEfkIIIUSXU7juZzJf+y8FP66icO2aSttqm7vjdDo577yZTDx6GLWN7ooMj2H6STcRHh7DTyt2tFT3u6SGDsOVuX6iuc2adTZjxgyr9N8ppxxHmaf6Ui5+hs9rZvv6D8QwjBbrW7Dz/LpyRU+QwE8IIYToUsrS95Hx4nMV3xesXV1tnzlz5lZ7k+Zfky8jLZ8qqztU47M5yEwvbJb+ClN9xTSqDsP1enxkpOW1ZhdFJxdM1hmo+NvhMAymxCcS6wwhfODAFu1bXYFfWUYGB95bRO6Xn1OyYzsA9i5Y0RNkjp8QQgjRZXiKi0l76gm8paVEjBxF8cZfKf51A16XC1toaMV+SUnJnKJG8L9ff8Ht8+F0Opkx41wSE5M4/4q6h2ulP/8sBT+uoscVV7X05XQ5dZXQd+Dj+sgCxsweSkiPnq3cM9EVBLOEg2EYOJ1OysrKsNntzOyVAkBYiwd+vYHqgV/B2jVkvvyCWdQlQFes6AmS8RNCCCG6hOItmr3/eITyzAxCUnrTa+6fCRs4CF95OUUb1lfsV1To4v3X1nB6eAz+nJ8/2xcMR1wsAO7cnOa+hC6p/EAWuV9+gbe0tCLr57DbK+3jdDo5edAQYp0hlGdnt1FPRWdXX9bZMAymTZvBjBnnYhgGZ58zk96TjsLZowfhg4e2aN8OVfbcC4DP6+XAe4tI/8+TeEtLiTx8DNFHHoWze3cMp5OI4SNbtD/tlWT8hBBCiE6sLGs/WQveoGj9LwA44uLode112EJDiRo/gdId2ylcu4boCRMBc224jH0F2OPHcvKQTD7ZqiuyfcFwxMYBUJ7TdoFfUaGLT5ds5tQZIzrkQub+/p985mCy/vUPyjMzyf3yM3pefS2XnXEWixe9XWl/m83GxcedAL+sozz7QBv1WnQFdWX9QkJCmDfvRnw+H9u3b2POH68hMTEJn8/XovP7AJwJiRihYXjycin8eQ3ZS5fg2rMbbDYSz/sdcaeeXtGH1uhPeyUZPyGEEKITS3/maYrW/4IRGkbCjHPof99DhCSZC6tHjRsPQNH6dXjLyyvWhgOD9G5DuPTyuYwdO75Ba/I54uKBts34rVm5i/Q9eR22uIm//ysXfEN5ZiYAZfv2sfuBeylb8AYnJCZWZP38w3CT+/YDwH1QMn6i5dRV/Mn/AVFSUjIvvzy/4sOi1giyDJutYrjnvqefxLVnN474BHr/5WbiTzujUh+6atAHEvgJIYQQnZY7LxfX7l0YISEMePAREs6agS0srGJ7SFIyoX364i0tpXjzRtas3IXPY1Zu8RkGWfSr9AYuGI44M+PnbqOM36HglQ65pEFg/3fmhuByRND7xluIPmISPpcLd85BLpwwCbu1Vpl/GK4z3gy4ZainaGl1FX9qS6F9+wJgOBzEnzWD/vc9SMSw4W3ap/ZGhnoKIYQQnVTJ1i0AhA8agiOm+qLrYGb9XHt2c+DHdaQeHIDXWpLLZ9hJ3bifCZMHNGi4pH+oZ1tl/Nas3IXPZ16Ef0mDjrSQeaX+A/tGTeWw4SMIHzac8KGKovW/0P+C3zM9KpJFixZWZFmKEhIBcEvgJ1pYUlIyp088ko+++6Za8ae2FH/GVBwxsXSbdFSLrRnY0UnGTwghhOikSrZoAMKVqnWfqPETAFi/3YXX7a60rTFrwTliYsAw8OTl4atjfa+WUFToInV9Bl6PGTh1tIXM/dk+f/99Nge7SqMpLizDMAxip5xIynU3EJKczJw5lYfhOhMSACiXoZ6iFVwwanSjij+1JGd8AgnTpkvQVwcJ/IQQQohOqniLlfEbWnvgF9KzF96e/UmPHozPVnkgUGMCJ8PhwB4dDT4fZbm5jet4IwUOVfXrSAuZB2b7/Hw+aux/1XlUDmuopzsnB199Cy0K0URRBw9yQmIShmG0i2yfCI4M9RRCCCE6IU9hIWVpezEcDsIGDKh1P8Mw2Dd6GmyvecH1xgyXdMTG4cnPpyz7IMT1aHDfG8PM9mXipfLcI3/wOuGYfu26wmfVbJ9fsP23OUOwd+uGJz8fd24OzviElu6y6OBmzTobrVPr3U+pYSxcuLjie5/bjWvPbs7r2ZsDKb3bRbZPBEcyfkIIIUQnVLJtK/h8hA0chM1Ze8BQVOhi266SagGTX2Oyfv4CL2XZBxvW6SZYs3JXrZmujpD1qynb5xds/50V8/xa776Ljmv06DG1rsnn53Q6GTFiNIvfWFfxN6AsIx2f201ySgovv/KmZPs6EAn8hBBCiE6oYn7f0LoXTq4r4PBraODkL/BS1krzzSqyZbVcRnuf61dbts8v2P47Kub5yVp+on5z5szFZqs7FLDZbIwfObXS8iiu3bsBCLWWEBEdhwR+QgghRCdU7A/8htQ+vw8gIy2/1oDDz+vxkZGWF/S5/Rk/VwtmnrylJWS8+jI5n3/K6m9rz/b5teesX3MF3/7hnVLZUwSjtjX5/JxOJ2eeOYN9O80PHPwfPpTu3glI4NcRyRw/IYQQopPxlpbg2rUT7HbCB9c9N+/8KyY0+/krMn7ZB4ls9tZNuV9+Sf43KwDYO+h3eI2oOvdvaPDampor+K7I+EngJ4I0Z85cli59v8Zt/mxf2o5S4NCHDwN2mR9AhPWTwK+jkcBPCCGE6GRKtm0z5/f164ctNLTVz18xx+9g0zN+Zfv3s/efjxJ/6unEnngyAD6vl7wVXwFgCwtj4vZ3Kva/82AWW3Zsr7W9B58w/61asKIt+YPv9Jeep+D770iceT7xp5/Z4Hb8c/wk8BPB8mf93nnnrWrbXC4Xd95/WaXXEj/qw+OjRhIChPaRwK+jkaGeQgghRCdTEuQwz5biz/i5DjQ9AClcsxr3gQNkLXobd56Z8SpO3Ux51n4c8fEMeOj/6HbUMQBEHj6Gw8dPDKpgxeGHj21y35oq/4fv2ffsf3Dt24fP66V4wwYAIkePaVR7FUs6yBw/0QBXXfWnoAICm81O94SB/ND9VNxx3c01O0WHIhk/IYQQopMpTt0E1L1we0tyxMUCZsbP5/NhGDVXDA3Glf94kB3ZViBz/KTqOyz/CIChgwbz1pw/MSc/r9aha37tYcFpr8vF/vmv4S0poWj9OmImH4+nsABnUhIhPXsG3U6tJfmXvlfp2/aU4RTtS3ReHpPjE/i6nmJMhmFj3MiplNkj2J58BCNaqX+i+UjGTwghhOhEin7dQOmOHdjCwtos42cLj8AICcFbWoq3pKTSNk9JCQc/+hDXvn1BtTU0IhJHPYGj0+lkzPiJ2EJDgypY0R4WnC5Y/SPekhKM0DB8ZWXkfv4pYGb7GhIoB1uSvz1kOEX7U1To4oMPdjCzn8JWx3Nns9lRA44mIjwGDIM0T0K7rZIratfkwE8pNVUptVYptUEp9bVSaoD1+k6lVKpSap3132kBxxyplPpFKbVFKbVcKZXc1H4IIYQQXZ3P7SZr4QIA4qdNxx4e3ib9MAyjYp6fOzen0raDSxdz4L1F7L7/HvK+/abOapaewkLOiUvAqGWNQb+qGby6ytS3h2wfQN7XXwGQfOFF9LhyDrawMACixo5rUDvBluRvD9cs2p/VK34j2xVGTvcjOO2Ek2vdzzDMQi9+PgxWfbWjNboomlGThnoqpeKAV4GjtdZblFIXA88Ap1u7zNRa/1rlGBswH5ittf5WKXUn8DBwRVP6IoQQQnR1uV99QVn6PpzJ3Yk96ZQ27YsjNo7yzEzcOTmE9koBzKIsBat/NL8uKyPzlZcoTt1E90tm11iEpnT3LuJCQjh54CA+27WTcnd5tX1qyuD5s36L319Eudtd574trdahmH6rVwEwdNAQ/nvvA0QMG96g9iuudfG7lJcHd3+EADPbp3/NBMMgPWYof7rwLH5av46cnBw8nkO/N5WyfQG2bMzkyCkDiYgKae2ui0ZqasZvMJCptd5iff8RcJpSKrGOY8YDpVrrb63vnwXOb2I/hBBCiC7NXZBP9hJzblvS+Rdgq2f4X0vzF3gJzPiVbt+OOycHR3w83Wf/ASMkhIJV33Pg3XdqbMO18zcALj3tDGz2hmXw5syZi81uD2rflhTsUMwx4ycQOWp0o87RETKcov1Zs3IXXv/6lzYbO3UxCxa8Wy3DXjXb5+fz0W7XxhQ1a2pxly1AD6XURK31T8Dvrdf7Wv++oZQygG+B27XWuda2iqdEa31AKWVTSsVrrYOu+5yQUPd6PW0lKSm6rbsgOil5tkRLkuer49u+6E28JSXEjjmc/idPblJBleZQ3C+Fgh/At2sHSWebSxPseP9nAJKPO5YB55xJ9xGDWX/LbeR/9y3qqstwRERUaiM7fS8Aw446glmFuSxYsKBSViskJIQLLriA4cMHVjt/UlI0s2bN4s3XX8ft8+F0OmvdtyXddtst9Rabsdvt3HbbLY3+PfRf61tvvUVZ2aF5Vw7DxsxpZ7X6Nbcm+dvVcAX5pbz939VkpOXhs3JAXp+B/jWD06aP4KLfX1jxLIWEhHDeeb+jmz0Ot9tbrS3/MVHdwlr7MlpFZ3u+mhT4aa3zlFKzgH8ppcKAj4FcwA1M1lrvUUqFAo8DTwEXN7XDftnZhXi9dS922tqSkqLJyipo626ITkieLdGS5Pnq+MoyM8lY/hnYbMScez4HDhS2dZeY/dyzbNm+zRzK+OhDlTeuXgV33g7AgLg4Hhmk2PHB/4g7sfIco7yt2wAoi+/BJZdcycKFCyttNwyDSy65stbn95JLruStN94AjwdbPfs2p3qHdwZwOp1Mn34OhhHepL7VdH9s+Jiydx97124itE+fRrfdXsnfrsZZ8b8tpO3ONVN2AR8Qeb0+/rd0U6VnyTAMRg46lbTfXDW25T/muNOGtErfW1N7f75sNqPBibAmF3fRWn+mtT5Waz0BM7gLB7ZrrfdY213Af4BjrEN2AxUrPlrDQr0NyfYJIYQQ4pDsD5eA10u3o4+pmE/X1g4fNwFHlaGWVZnVJs1iJnlffF6p0IunoAD3gQMYISGE9OhZrVpnMHPXkpKSOWXEYRjA6RMntdo8t2CGd/o111DMmu7PKUOHE+PxkvvV501uX3QORYUuNq/PML+pMirA6/GRuiGDyPBY68MIgzPPnMG+nWV4PTUnW/zHSIXPjqE5qnr2sP61AQ9iztlDKRVj/WsAFwDrrEPWAOFKqWOt768Gah7cL4QQQog6laXvo2DV92C3kzBtelt3p8KcOXOxO+oeWGSz2bjm1r9hj42lLCOdktTNFdtKd+0EILRvPwwrgAycyxZswDR72gyGRUVz4diJjbyShgum0iaAw9G8hVeq3p8/3XIbYC54LwRY8/pqCeIAfD4fq1fuYs6cuYwdO57xI6fWWXk38BjR/jXHOn73K6U2A1uBMuBWoDvwlVJqPfArMBSYC6C19gKXAM8opbYCx1vHCCGEEKKBspcuBp+PmGMn42xHlRuTkpKZNWtWrVk/f8YuqUcPYo8/AYCcLz6r2J6zbRdrUs6A3ofmp/mzWoZhBB0w9Rg8mHuHjSS6uKiJVxS8+tYS9LPbm7fwStX7kzJmHLawMMozMymvZ3FuUVlRoYvFb6zrVJmsokIXm39Jr3OfwKzfyy/PpzjfXmeg6D8mIy2vObsqWkhTi7ugtb6yhpd3ALWuFKq1/g44rKnnFkIIIToLn8/HwQ+X4oiNJWby8UEd49q7h4LVP2E4HMRPPauFe9hw119/PQvfegu3x1NtW2DGLua448n+cClF636mPDsbZ0ICG7a7yA3rzhavraJiHJhZre3btwUdMIUk9wCgfP/+Jl9PQ8yZM7fOoi7Nne0LPK///hh2O+FDFUXrf6F482Zijjm2/gYEYGbG0vfksXrlrk4zf82s4ln/fv4M3nGnDeH8Kya0fMdEq2mOjJ8QQgghmqhg1fdkL3mf/W+8ji+Yd2dA9gdLzGzfccfjjE9o4R42XPfu3Zk+49xqWb+q8/McMbFEj58IPh+Zr7xE/r4D7C6LA8NgRyaVsi5JScm8/PL8oAMmZ3IyAOUHsoK+r82hIuvnqDnr19zZvsDzBt6fiGEjACoNo/WWl5P//Uq8pSXNfv7OoKjQReqGTIBOM38t8JrqIxm8zksCPyGEEKKNeYqLyXrnLQB8bjfl2QfqPaYsI53CNavNbN+Z01q6i41W01y/mubnxU89C1tEJMWbN/H1M0sr5hX5aNpaYbbQUOyxsfjcbtwBwx3zf1hF8Rbd6HaDMWfO3Kr1M7DZbA0aqtpUEcPNwK84dXPFPc1e/C4ZL73Agfffa/Hzd0RrVu469Px1kvlrgddUlc1uMHJsL/506/EV/0mmr3OSwE8IIYRoY9lLF+PJz6/4vjwjo95jcpb/D4BuRx9bsVh6exRsNc7QlBT63XMfhhrNvvB++GxmsNgcVQNDkrsD5rIXAK60NDJeeJaMF55rdJvBSEpK5pRhI3BY0Z/T6WTq1OmMHTu+1RZVD0lJwR4VjTvnIOWZmXgKC8n96ksAClb/1KpZ0I7Anxnzz2trzqqVs2adzZgxw+r9b9ass5t8rkBVr6kqqczZdUjgJ4QQQrQh19495H7xGRgGYYPNuURlGXUXYHDn55P/3bcAxJ16Wov3samCrcbpjI9n32HTwFZ5aGhTsy5OK/Dzz/Mr3rgBAHfOQTwtWPTF5/NxTnwC/qSfzWZj3rwbGzRUtakMm43wYcMAKE7dRM7nn+JzmWuyefJyKf1tR6v0o6OoKTPmc3v4aUXT71Mwy3yYS5zUWiajUerK9vl1lsymqJsEfkIIIUQb8Xm97H/jdfB6iT3hRKLHmcOryurJ+OV++Tk+t5vIw8cQ0qNna3S1SYKtxllU6EL/momXmtcXa2xGIsSa51e238z4FW3aWLGtvnvdFOX7M+lWVMwJPXq16vDOqvzDPQvX/Uzu52bl1LBBg83X1q5u9f60V7VlxrwYpP6yj7w9TXtWglnmI5hlShqaOcxIy5fKnAJohqqeQgghRFdRVOji0yWbOXXGCCKiQprcXs6n/6Nk6xbs0dEknH0uJdu2AVCWWfsbTK/LRe6X5oLccaed0eQ+tJZgqnHWlZkIrDTYUIcyfpl4y8spCZjbV5aeTvjAQQ1uMxj+9fMuPelUDmza0GrDO6uKGDbc7M+vZqYzfMhQEs+dyZ5HHqRwzRoSZ87CqDoZsQuq7/lbtWQNp107tcbtrn1p5H62nIQZ5+KIialxH/8HIIsXv0t5eXm17bUNg65q9Ogx7NixvcY2AtvyZw798/UK1vxE+jNPEzFqNL2v/0ud5xCdk2T8hBBCiCAFlngPVJaRgae4uEFtlf62gwPvLQKg+2VXYI+IrMjeldcR+OV/txJvYSGh/QcQPmRoA6+g7dRXjbMl5yGFdD801LN0+zZ8ZYfaqG9YbWMVFbpY/mMJLns4vcdPbNXhnVU5k7vjiIuv+D7+zGmEDRqMvVs3yg9k4dqzu0361Z7U9/z5bA52FoRRmFtY4/b9818jb8XXHPzowzrPU1fWL5hsn78NfHUH6jW15dq7F4DQPn3qPYfonCTwE0IIIYJQW4n34tTN7Pzbbfx2283kfv1lUMUyPCUlpD//DHg8xJ50ClFjzE/mnYmJGA4H7pwcvKWl1Y8rKODgJ8sAiD/tjE6VpWnJeUjOJGtJh6z9FFlZL4e1/EVLBX6rv91FtjuC3+IOrxhq2VYMwyBiuJn1C+3bj4hRh2HYbESNHQfIcE8I9vmDVUvXVnu9dPeuiixy/g/f43O7K7ZVXQg+MSGRU0eNrij44xdstg8gIjyGoQOOwlZlLmx9bfkD/NDeEvh1VTLUUwghhAhCTSXeJ586mOwl74PPh7eoiP2vv0reNyvofulswvr2q7Edb2kJma++THlWFqF9+pI48/yKbYbNhjM5mbJ9+yjLzCCsX/+KbZ7iYvb+6x+4s7MJ7dOHqHHjW/R6W1tLzkOyhYVhj4nFk5dL/vffARB7wokcePcdytObP/ArKnShN2SAYZAeM5TyyDiaPjC4aWJPPBnX3r0kX/j7ig8MosZNIO/rryhcu4bEs89r4x62rWCev3eWP0R27l74Z91tDT5nKos+MKvuBo4SOHZKX9JffI5p5R4+wcBcrMQUbLbP3+b4w6aSuuM7wFNte3l5OW+/vYC3315Q8ZpSw3h4gDlMWgK/rksCPyGEEKIeRYUu/v7wXA7k7D304hvAX6vv23/jev4vPZ2UeTcQMVRVvO7OzSXn80/J+/pLvMXFGKGh9Pzjn7BVqfIX0r2nGfhlHAr8vC4X+558HNfuXTiTkkmZdyOGveZP+zuqll43LCQ5mZK8XDx5uRgOBzGTj+fAe4soy9qPz+3GcDTfW6I1K3dZmV8Dn2Gw5rvdjZqb2JzC+g+g3133VnotQg3DFhFB2b59FG/ehOF04iksxB4djTMhEXu3bhj1FCNpCQ2ZSztr1tlonVpvm0oNY+HCxbVuP/+KCXjLythx4zy8JSX0v/+hSoWTvKUl/PaVhy8MA3cdmUGHYaCioiquo2KUwPp0evzwNuzeSkJsLNNOOoUPvvgMt9eDw24POttXVOgidX0G4SExqAFHsWnbinqPcTqdjB45mvLduzEcjoqhz6LrkaGeQgghRD1++nIryfEDah1a5ed0Ohk5cDA+Vylpjz9G0a8bcOflsv+tN/jt1pvI+XgZ3uJiwocMpff1N9ZYkdPZowdQeQhi+gvPUrJ1C464OHrfeDOO2NjmvcAuwBnwZjds8BDsUVE4EhLA46E8a3+zncf/xtxrzcHyYWu3a6QZDgdRVgGQvY89yp6HH2DfU/9mz0P3s+Om69l27dXkfv1VnW343O56h0g2VG1zaWvSnEskFK37GW9JCaH9B1T73bSFhTN7+nnUN7jahsGM0HDceXmVRgl43W5SixNwJiXT97Y7mfvXO7DZrSVOfD6uuupP9fYPrA8VPOZw8nEjp2Gz1f+Bhc1m47LTpwEQ0iulWT/kEB2L/OSFEEKIOhTmlaA37mfcqLPQO1dR09AqP5vNxvX/ehLPx8vI/2YFaU8+jmG3VxQTiRo3nrjTz6yzimSIFfj5C7y40tIoWvcztrAwev/lZpxtVCCko/Mv4g4QOWKk+VqPnrgPHKAsI52Qnr2afI6iXzfw1ZL1eI0eEPCGvCkVSVta7IknUbRpI4bdjiMmBltkFJ7CAsoPZOEtLOTAooVEj5+A3cpigbkMSXHqZvK/+ZrCn9cSPkTR4w9X4oiNa3J/qs6lnXBMv2pZv2CzfH7BDqPMW/kNAN2OOrrG7QPPnMYJ77/NFweyasz6OZ1OThk0lFiHg/3friJ1c0TF8FGfYSc9dignzD6fkB7xJAEzZpzLokULmZKQRHRRMdTzq11RgMYKPyPDYxg28Og6s37++X5RRYUUA6G9e9d7H0TnJRk/IYQQog4r3/gKn9dHZLg5tKq+ggpJyd3pfunlxJ58Cng8+MrKiBw7jn5330evuX+ud+kAf6bBv75cweofAYiaMLFZgpOuyhkQ+EWMGAUE3OtmmOfndbn47bmX2Gv0wFclC9PUdQhbUtiAgQx67HEGPvoYfe+4i97X/4V+d97N4MefImL4CLwlJRz838cV+5dlZLDzrttJ++f/UfDTj/jcboo3b2TnPX+jcCTP3+IAACAASURBVN3PTe5PTXNpqwomy+cXbNGUsowMijf+iuF00m3SUTXuE9a/PxdOOLLWrJ/NZuOqOWbmbu3a/ZWKvABgd/DzL9kV38754zWM6t2Xmb1SyP/h+3qvJTDb51df1s8f9Lr27gFkfl9XJ4GfEEIIUYvsDanszA2peCM/buQ0DKP+UuyGYZA06yJ6XTuPvnfdS8o11wVdQj2kuzXUMzMDn89H4ZqfAIiecERTL6dL82dSbVFRhPbta77W0x9kNz3wK/plHTuihuGr5flobEXStpRwzkwAcj//FHduLp7iItKefJzyjAwc8fEkTD+bvn+7h4iRo/AWFrLvqX9z4P13a20vmIXHr/vrdN5e9neg9oA5mIXQ/YLN9uV+YS5sH33kUZWym1UNu+JKTh40tNaqnP2Om0J5t0TS7L3wVnmbXfV6kpKSef6JZ4h1hlDw4w91VgSuyPZVSTT6s36m2iuFVgR+ffrWeg7R+UngJ4QQQtTipy+3EPg+q7asn93uqJZVMAyDqDFja63uWRt7VBS2qCh8LhfFmzZStm8ftsjIikW4ReOEpPQmceb59LjiqoqCJYeyq00P/PavWk169JBaA7/2nPWrTfjAgUSNHY+vrIzsDxaT/twzlGdmEJLSm/5/f5CE6WcT1q8/KfP+QuLvZoHdzsFlH3Dwk49qbC+YTJ3NZqd74qGseE0Bs38h9JCQugu/BJvt85SUkLfyWwDiTjylzn3DhwzlL8+8gL3Kuf0BpuFwsHfwidQ267Hq9YQNGIgzKRlPXi7FqZtrPW9dy02MGzmN5PgB2Kv8XbLZbPRJOJ6i/NKKNfxCZKhnlyaBnxBCCFEDn9vNgTxvtWF7NWX9DIygS7EHw5/1O/jhUgCixo6XggxNZBgG8aefSdTowyte8w+dLUtPb1KBEk9xERsznPjqKf3RMbN+54JhkPf1VxRv/BV7VDQpf56HLSysYh/DZiP+tDPoccVVABxY9DZ5335Tra1gMnWGYWP8yKkV39eV9atvHUubEdzvZf7Kb/G5SgkfqoLKzPsDT38QGxhgFhW62FUUXe3vRm3XYxgG0UeaQ0uzl7yPz1PzHOK6lpuIDI/hnFNvRQ08Grt1XodhMGHksRTmGKz6YC0+Vyn2mBgc0d3qvT7Recn/RYQQQogaFOtUjti1mJAePen3/+3dd3xc5Zn3/8+ZImlUbau493JccMf03sHGpjg4CSGFBC1xymY3pO5m8+wmD5snyS+bHpJsnE0CS2jBGAghhIQAAgw2GDd0XGTLtooty7akURlJM+f3h2bGKjOjkTTSSKPv+/XSy9IpM5fk22Ndc933fX3j/i6/ZPrS3mbz5idoa2vD7XZz663r49qKPV5pEybScvAAzfv3AZBz7qqEPbac5czJwZGZRaCpEX99Ha68/u2W6n17O3VpBdi97Pra3z6EyZQ+aTK5F15E/Wsl4HQyceOno24wlHv+BfgbGqj5/UMc/+2vcebmkL1kWfh8KGEK/dvpzuFwYs68iExPXpfjkTbHKSwsYsOGDTz88MMRH8tlGFw5cRLjevk7tQOB8DTPMVfHrvZ1Vly8kS1bngzGfXY66faScuyo9b7I38/Yq66h7pW/03LwALVbNlNwa8+einfcfS4VP/gejbt2UviBOxkbIdb1NQtYs+Za/L52DAzmTO245kB5M0VOD5OuuCru709SkxI/ERGRCMKbqqw6r0dlIdovfYkSWo8GaJrnIDIMg7SJE6k7XMGWR/dywwfO7bVvXCQNW7dy/rE9jP/wx8i77PJBiDS5Cm5bT3t9PXkXXdKlN2UkY6+5Fn9DPaeefZqTTzzeJfGDrv92uute7QsJVcm67/D5uc99jt8//PuIj+UwDG4bM47Tf/oj+Tevixpv057dtJ04jmtcPtnLem/5EBJKYh9//JEu00njaQTf/Q0AZ04OE++5l2Pf/X+c+uMzeMz54Z1nQ9rr62ncsxucTnLOO7/XmJZNXYwnPQebjjbxFQtv4Jw1a+P+/iQ1KfETEZFRL+b28NvegK9/BTjbBDraL32J0jnx0zTPwZU2YSKH6gs4Xtvar5YL7XVnaCrdC04n2SsHtwl9srjGjGXK5z4f9/Xj1qzl9PPP0VpxDH9TI87MrPC50L+dJ//wGO2dpjVGq/aFRKr6jR8/nhtWruKPW1+j3bZxu91MmzadsrKDrLnmOsacOsOpZ58mJ8aOuKdfeB6AMVdejeGMXbHtrrh4IwcPHujyxs8dd/dvDGSa8xm3Zi2nnn6K6l/9gun/9h+48s7+LM68+AIEAmQtXRZzumZx8Ub279vPwhnvC083tR0ujrSNo7mxrV9vbEjq0Bo/EREZ9frTBLq4eCPLl69MeLUPwD3+bPPonFXazXMw+fMnUZUzFzD6tflKw7a3wLbJOmcxzqys3m8YBRxuN+kzZgLQUnawx/mPf/hujG5rKqNV+0KiTZPdYC4Mr6x0OBzcf/93WL58JRu/+C/kXnIpdns71f+zKeKOmS2HD9O0dw9Gejp5l17Wh++wQ2FhEZs2PZiwN37yb16HZ56Jv66O47/ZhG3bNHp9PPmbbVT/taNX37ib1vQa090f/DqZWV17Ko7E9aWSeHoLUURERr1Y089Cuk/pDP3SNxjSiopwjR2L4XKRac4flOeQDqUNedg0A/1rtN7w5lYAcs67YFDiG6k8s+fQcmA/zQf2k3XOkvDxRq+PV586yKUFE3j5ZDXtgUB4neznv3p2KmL1pl9S/1pJ1PVsIZm1NVxZUMgLJ2tYt+42THNB+N+l/47307hrFy0HD3DmxRcYe+31Xe499dwzAIy5/MqYLRyGiuFwMOET/0D51/+Fxp3vUv9aCe96i6iu8uLMWsDKeS14Zs+J+Rjhtg/d8txo02VldFHFT0RERr3CwiJuunEtTmfk90Pj3RY+UQyXi+n/9h9M+5eva5rnIGr0+jhY2R6eEtfXlgvtZ87QcvAAhttN9tJlvd8winjmdCQozQcOdDm+7dVyahoMVi5cjSM4tTLSOtmMWR0tHVoO9qwYhrQ3NdN2/Di3T5nO8mUrejyGMzOL8Xd9BICTTz5B6/Hj4XOtVZV4396O4XIx9rquCWEyuceNo+gDHwLg2KNPUPpuFWBQlTuXzOt7X6MXq+2Dqn6ixE9ERARYsWg13RsghwzGBi69cebkDIsqRCrr2IGxq778cty4610AMhcs7NLeQCBjVkfi13KoLNyioNHrw9pZBYaBd/xyVt90C4ZhRHxTJVTZai7rmjh21njoENg2E2bOYtOvH4r4xkz2suXknH8hdmsrx//nVwRaOqq7p/70HNg2uRddgmvM2B73JVPOhReRtXQZBzNNAsGfne1wsOtQ5FYPIeFqX5TNZUZiL0lJLCV+IiIy6jV6fVSVt0Vszj7U1T4ZGtF+Se7LL8fenR2JX1an3oDSwZWXh7uwCNvnw1fR0Tx8e0k5gdAcRMPBinPWRF0nmzZ5CkZ6Bu0nT9Jedwbo+Dvb/NCO8N9N48EyANKnT48ZS9EH7sSZk0vz/n0c+pcvc/qF56l/4zUwDMbecFOivuWEMQyDnNvupCp3LrbR8Xpk4+h1XMaq9oWo6je6KfETEZFRb3tJOXYg0NGcvdt/jcmo9sngG+iUuEBbK017dgNK/KLJCE73bDmwvyPR3lmNHfz3FcCgqryVH/9wU8Q3VQyHg4yZXTeI2V5STtXRuvDfjTeY+GVMnxEzDmd2NlP++QtkzJqFv66OmkceBr+fnFXnk1ZUlJDvNdF27D4N3ZrA9zYu+9NKQkYXLRwQEZFRLfQLaSAAWZ48zFkXUlpWQiDgV7UvRcU7JS7WRhjNVil2ayvpU6fhHpc/mOGOWJ7Zc2h4/TWaDx5gZ9u04LTFs2+s9LaZjmf2HJpL36P54EGMuedQuqtjjV7o76axLFjxmzaj11jSp05l6pf/lYY3XqfmiUcJNDczbnXsHTKTJTw+uw3P3sZlf1tJyOihip+IiIxq20vKw+togI6qn9Hx36Oqfampr1PibNvm2H99l6P/734CPh+NXh/PvlCFz+kha6mqfdF4ZnckdGfKjnap9oX0Nq02Y3bHBi9Ne3az9Zkd4ZYMtm3z1stlNB2rAIeD9KlT4orHcDjIvehiZn7rO8z81ndJnxzffUNNG7TIYFHiJyIio1aj10fpu1VdfiHN8uRhzrwQMFh90y2q9qWgvk6Ja62spGnPbpr376PmsUfY9mo5tS3pHBq7lKwly2M+zmiWNnkyjowM9jO1y5srncVKZDyz5oBhUF9Zw/4yb7hFQcBvY+05js9IJ23SZBzuvrUncLjTcOVGb4KeTNqgRQaTpnqKiMiote3V0GYTXd8HXbFoDafrq4I7fUqqiTYlruax33P6+T+Re8llTPjo3eHjobV8ACdeeR1r1jQwDKry5hIomDTo8Y5UhsMBM+dT5Zvbo9oXEmv6ojM7m6K7PsLr205ht3a93/bbHBq7lPOmpdavsn2pRvel36QIqOInIiKjVGhr+Ui/kGZ58lh71X1UHvbpnfVRJO/SywFoeGsrAZ8vfLxxb0filzFnLofGLT1bvTIcbH/96JDHOZIczFrQo2VGd7Gqfu4VF3I0UNhzmmiwt11g0ozEBDpMaIMWGUyp9TaJiIhInLa9GlzbZzijXqN31keXtAkTyZg1i5ayMrzvvkPueRcQaGujeZ8FwJi7iqn63e5OO1M6et0EZrQ7HcjCdsTuPxcrkYm53g0orc8jlWqu2qBFBpMSPxERGZWqDlaHe2RFo3fWR5+c8y+kpayMhq1vkHveBbQc2I/d2kralKnBLfYdEDh7vd4ciG1D8QVU//pXZMyezdirrunTvb2td7MdLg4caeYCb6sSb5E4KPETEZFR6ZqJJzj1zjOMW3MzBbfcnuxwZJjIOfc8ah55mMbdu/B7vTQG1/c5zMUdSUig6/XxtH4YzQyXi4n3/EO/7o1vvRtKvEXipMRPRERGpbbTpwBw5xckORIZLjZsuAXLKj174JJO0+62vRH+NH/MFNbf8LXw16r6DQ6tdxNJrAEnfqZprga+AbiBU8BHLcs6ZJrmPOA3QD5QC3zYsqz9wXuinhMRERkK7adPA+BS820JWrJkGWVlB2lra4t6jcPhZHzB7C7HVPUbHL2tdysszKGmpmGIohEZ+Qa0q6dpmmPpSODeb1nWYuCXwM+Cpx8AfmJZ1jzgJ8DPO90a65yIiMigaz/VUfFzjR2b5EhkuCgu3ojDEftXI8NwsDJCmw811haR4W6g7RzmAMcty9oX/PqPwPWmaRYBK4CHg8cfBlaYplkY69wAYxEREYmLbdu0h6Z6jhuX5GhkuCgsLGLt2ltxu90RzzscTsyZF5HpyetxTlMORWS4G+hUz33ABNM0V1mW9RZwZ/D4VKDCsiw/gGVZftM0K4PHjRjnauJ94vz87AGGPjgKC3OSHYKkKI0tGUyjbXy11ddjt7XhzMpk/NSiZIeT0kba2PrKV77Ili1PRjyXlubmoce+T1GRxsxwMdLGl4wsqTa+BpT4WZZVZ5rmBuC/TNPMAJ4DzgCDnpXV1noJBHprCTq0NNdcBovGlgym0Ti+Wo4cAcCZN3bUfe9DaSSOLYcjk7Vrb2Xz5ie6rPVzu92sXXsrhuEZcd9TqhqJ40tGjuE+vhwOo8+FsIFO9cSyrL9YlnWJZVnnAj8GPMBhYLJpmk6A4J+TgKPBj2jnREREBl14fZ+meUoEkdb6ORwOios3JikiEZGBG3DiZ5rmhOCfDuB+4AHLssqBHcAHgpd9AHjHsqway7JORDs30FhERETiofV9Ekv3tX5ut5t1626joEDbEYjIyDXgxA/4pmma7wH7gVbgy8Hj9wKfMU1zH/CZ4NfEcU5ERGRQtYV39FTiJ5F1rvqp2iciqWDAffwsy/pElOOlwPl9PSciIjLYQhU/JX4STajq9/jjj6jaJyIpYcCJn4iIyEijNX4Sj+LijRw8eEDVPhFJCUr8RERk1NEaP4lHYWERmzY9mOwwREQSIhFr/EREREaMjubtpwFN9RQRkdFDiZ+IiIwq/oYG7PZ2HJlZONLTkx2OiIjIkFDiJyIio4rW94mIyGikxE9EREaV8Pq+sWOTHImIiMjQUeInIiKjSttpVfxERGT0UeInIiKjSruat4uIyCikxE9EREYVNW8XEZHRSImfiIiMKqGKn3r4iYjIaKLET0RERhWt8RMRkdFIiZ+IiIwadiBwtnn7GO3qKSIio4cSPxERGTX8DfXg9+PIzlbzdhERGVWU+ImIyKgRXt+njV1ERGSUUeInIiKjRltomqeat4uIyCijxE9EREYFu72dxh1vA+Aal5/kaERERIaWK9kBiIiIJFqgrZWm9/biys0jbcJE2uvOUPXLn+M7fAgMg+xly5MdooiIyJBS4iciIimndstTnH7u2bMHnE7w+3GNy2fCJ4rJnGcmLzgREZEkUOInIiIpxfb7qS95BQD3+Am0nawBv5+c8y+g6M67cGZmJTlCERGRoafET0REUkrjnl346+tJmzCR6d+4HwIBAi0tOLOU8ImIyOilxE9ERFJKfcmrAORedDGGYYDTqaRPRERGPe3qKSIiKcPv9dL47g4wDHIuvDjZ4YiIiAwbSvxERCRlNLz1JnZ7O5kLF+FWrz4REZEwJX4iIpIy6l87O81TREREzlLiJyIiKaG1qpKWQ2U4PB6yl61IdjgiIiLDihI/ERFJCfVvbgUg+9xVONLTkxyNiIjI8KLET0REUkLLoTIAss5ZkuRIREREhh8lfiIikhJ8x44CkD51WpIjERERGX6U+ImIyIjnb2jAf+YMRnoG7oKCZIcjIiIy7CjxExGRES9c7ZsyBcOh/9pERES60/+OIiLDWKPXx+aHdtDkbU12KMOa72go8Zua5EhERESGJyV+IiLD2PaScqqO1rGtpDzZoQxrZyt+SvxEREQiUeInIjJMNXp9lO46DkDprmpV/WJQ4iciIhKba6APYJrmGuAbgBH8+HfLsv5gmuZhoCX4AfAly7KeD95zAfBzwAMcBj5kWdaJgcYiIpIKGr0+XnjqPXLzMrBtGwDbtnn9pTIa6lq4bt1CMrPTkhzl8GH7/bRWVgCQNmVKkqMREREZngZU8TNN0wB+B9xlWdYy4C7gN6Zphh53vWVZy4IfoaTPATwIfMqyrHnAy8C3BhKHiEgqCU3v3Le7moC/I/EL+G327TmuaZ8RtFZXY7e34y4oxOnxJDscERGRYWnAFT8gAOQFPx8DVFmWFTBNM9r1K4EWy7JeDX79AB1Vv7sTEIuIyLC1YcMtWFZpr9cVjJ3K7df/K7ZNxzyKkI4ckNJd1Zx78XRV/YJC0zzTpmqap4iISDQDqvhZlmUDdwBPmaZZDmwGPtzpkodM09xpmuZPTdMcEzw2DSjv9BgnAYdpmuMGEouIyHC3ZMkynM7Y77c5nS7G58/q+MIwIl5jB2xV/TrxHT0CaH2fiIhILAOq+Jmm6QK+AqyzLKvENM2LgUdN01wIXGpZ1lHTNNOB7wM/Bj404IiD8vOzE/VQCVVYmJPsECRFaWyNfJ/59D/yhz880ctVBisWrY55RSBgY+2u5vq1C8nOzUhIbCN5fNXUVAFQtGge+SP4+0hVI3lsyfCn8SWDKdXG10Cnei4DJlmWVQIQTP4agQWWZb0VPOYzTfOnwJbgPUeA6aEHME2zAAhYlnWqL09cW+slELAHGH5iFRbmUFPTkOwwJAVpbKWGHW/UMH/WRbx38FUCAX+P807DgTnjAjI9eRHu7irgt3l+y14uu37ugOMaSeMr5nTZ9beHPzXN+TzyyOYhikqiGUljS0YejS8ZTMN9fDkcRp8LYQNt53AMmGIGF/SZprkAGA9UmqaZFzxmAO8HdgTv2Q54TNO8JPj1vcBjA4xDRGRYa/T6KN1ZzfKFqzGMKC+9Dicrz7k5rscLBOxR0+Jhw4ZbWLZsPsuWzY9rjaTb7Wbp0uVDEJmIiMjIMdA1ftXAJ4HHTdN8F/g9HZu0pAMvmaa5E9gNzAM2Bu8J0LH7589M09wPXA58eSBxiIgMZ3YgwGuPvU6gvZ0sTx7mzAtxOJxdrnE6XcyfdVFc1b7w49qjY63fkiXLcLvdcV/vcDgoLt44iBGJiIiMPAPe1dOyrIeAhyKcivp2q2VZrwGLB/rcIiLDXdvp0xz+xa8o8y/HdnS85K5YtAbr0OtA5+meBisWxl7b113Abw/KDp/x7j46VNMpi4s3smXLk3Fd63a7WbfuNgoKCgc5KhERkZFloFM9RUQkikBbK5U//gHvncnG7rRDZ/eqn9PR92pfyGBU/eKpsA32dMrO0zuvvfYyfD5fXPep2iciIhJZIvr4iYhIBDUPP0T9seNUzbgM2+g6tbNL1c/oe7UvJOC3qa6oS0C0Z8VTYUtUghVvdTEeqvaJiIhEp8RPJIUNtyl7w12j18cLT73HdesWDnjqZN2rr1D38t85VHQROJ0Q6Ho+VPXbe+AV5s+6iFUXLeh1h06/18vBz30aIy2NOT/6GYbTGfP6/iosLGLt2lvZvPkJ2traepxPZIK1ZMkyysoORnyevlK1T0REJDpN9RRJYcNhyt5Isr2knKqjdQOeOtly+BAnHvotAE0TTQKByNetWLSGiYVzWLFwdVxVO2d2Nq78fOzWVlqrqwcUY2+KizficET+L8K2De66855Bf56+ULVPREQkNlX8RFLYUE7ZG+kavT5Kdx0HGNCGKc0HD1Dx/f8Pu62N3Esv4/0fuTzm9fextk+PnzF9Bt7aWnzlh0mfPLnP8cUrXPV78gna2s9W45xOF/NmXMih0kamTo/xAH19nijVxVicThe2bRMI+DWORUREeqGKn0gKC/1SHa3qpyrJWdtLyrFtG+j/hilNpe9x7HvfIdDcTPaKlYy/88OJDpP06TMAaCk/PODHCm2gMnny5PBGKp0/Hnvs912Svg4GKxetTmgPwf5W/VwuJ6tX34xhGBrHIiIivVDFTyTFxar6pXqVJN41e41eH//xrU9x8vTRswcfAr7U89po6yG9O9+l6mc/xm5rI+fCi5jw0Y8Pyhq8jGDi5zvSv+mofd1MJbQXqQ04DQfzZ1xIpicP27Z5/aUyGupaBrwmsq9VP4fDgW3brFt3G/fc80kqKo6l9DgWERFJBFX8RFJc6JdqV7eKymio9kVbs9fo9bH5oR3hitX2knLGF8zq0VS9u2jrIRu2v0XlT36I3dZG3uVXMuFjnxi0jVfSp3fMr2w5Uo4dbfFgDH1thu6Cs2PH4WTFOWuAjt1E9+05npA1kdDxBoWB0et1breb1avXsnz5SoqLN1JYWMSmTQ+m9DgWERFJBFX8REaBT3zk42x+/NEuxwzb5p57PpmkiAbf+963jv37rY4vfk/E6t3/+Q7MnWty7fn3sXzhakrLXqNrU/WuIlVI618rofrX/w22zdjrbqDgfRswjN4TmP5y5eTiGjeO9lOnaK2uJn3SpD7d35dm6C6HgyvzC8mYNYun33yjZ6/BjpmxCWkiX1hYxPVLl/Pc9jdpt20Mw8AwDAKBAC6Xi0Dg7Fq+f/zHzyvRExER6SMlfiKjQOaJE1xZUMBfa0/SHgjgMgyuGJuPe+8euLwo2eEN2Jm/v0RrZQWeufPINOfjyMqiKG86Bx0HCARiJXJOisbOxLbtcHuF0rKSqPf4fD6uuebSiOdmT5jI44Oc9IWkT59B+6lTHRu89DHx68u0SocN6ydPpeDTX+Stz3+xS6/Bx//0DWrPHAt//dMHIz9GX1qF3D5pMn/a3vF5qCrZ2tqK0+nkxhtv5Jlnnkr5KrWIiMhg0VRPkVGg8d0d3D5xSngDDafLxfpJkzn9wvPhDU1Gqtqnn+LE7/6HMy++QNUDP+HgP32GPZ/9HLMnXoFhxH6JMwwHsyddRcDf8TNYsWhNr/dE4nI6WXnZFUOS9AFkTOuY7lm/9Q2aDx7Abm/v0/3xbKbicji5oqCQKavO51ilk1uu/UKXat9ApsZGEmhpJvP4ca4sLMIwDG655XbWrbstvHHLZz/7z+HpnSIiItJ3SvxEUpwdCNC4813GpqWx5tobO36RvuV2CorG01ZdTXMfNvoYbmqffZrap54EwyDvyqvJXLAQw+2mLGchmZljMGdeGDU5cTicmDMvwpNxNpkJVf16S2i6c7pcQ5qQeOZ0NHpv2r2To//5TQ58diOnX3wh7vvD6z5jrEN02AHWT5qM+7xLKd11PJwch8STJDscDj505ye6rKeMpmmfBX4/Hzz/onCCV1y8UWv5REREEkRTPUVSXMuhMvwN9bjy87n3n+7j8PEqiv/hU1DyKqeefoq6l18ic/6CZIcZUbw7UM6ZMpXH77wLgIbTjfztv7dj+21WLFqDdeh1Iq3bMwwHKxet7nE80j0GBg7AT8/qaDI2yfHMX8CkT32Gxt27abZKaa2u4tRzzzLmqmvirjoWF2/kqScejXjO5XRyZeF4xs+ey97aTGy7vsc1vU2NdTicrFp+NYdLG8MbwFx2/dzw+c47rtrYPPfiCeY7PUxZvpJN3/jP8HWbNkWZQyoiIiJ9osRPJMU1vrsDgOylyygqGh/+Rbrtkss49cwWGrZvo7ChHldObjLDjGjJkmWUlR2MuRbN7XSy4qJLwl+/82ZFOD2LlZz4/W387qkv9hqD2+3mmvMv5sXXX8Hvj5TgDH1LDMMwyF6+kuzlK7Ftm7Iv/BP+M2fwHT0Sngbam9y2dq7IL+CvJ2tot+0uG6g4XS7u+5//paCggK2/3dGj2hfSW2I9e9KVlO6sBnpuANN1x1Wbky1pHBq7lNkLFvbrZyIiIiKxaaqnSIrzBhO/rG5rrdz5+WQtXgJ+P/WvlSQjtF7FsxbN0WmaZaPX12NaYn/W7blcrvB0T4fDwef/zzdYd9v7erRBGA4tMQzDIHvJUuBskh8P77Y3g+s+O75Pp7NrM/TCtCLzGAAAIABJREFUCRMwXC7uuPtcPvnly/nkly/nw5++AKfr7M8y2tTY0DTajLRc/IGOvwvbtsNtH0J/TwDv7azqSA4Ng6rcuQQmTuv/D0NERESiUuInksLaak/SWnEMIz0Dzzyzx/m8y64AoO7ll4blJi+htWjR+s51T7y2l5T3+D66JyeG4eg1EeyeBBUUFEZMQpNR7Yska8kyABp3vRvX9bZt0/DWm4xNS2P1FVfFvYFKpJ9vpMS6yzTa4OUBv03prmqavK1se+VwuAdhwG/jDybqtsPB21ur4voeREREpG801VMkhTVsfQOArHPOwREhecpavATX2HG0HT9Oc+l7ZA7hNLt41+/NnDmbaDlp98SruqI+4rTEzlMSHQ4ns6eu5MCRtyKuTQslk/fc80kqKo6FH797G4ThUO0LyVywEMPlouXQIdrr6nDl5cW8vrWygtaqShzZ2XzyC1+hqrGe4uKNFBQUxlxTF+nn2306baja16XfX1CgrY0Xf/o0lf4xBIye//3YOBLSE1BERER6UuInkqKayw5y8qmORt25ndbAdWY4neRecimnnn6Khu3bhjTxi2v9ntvN5PHz8DgnY5WV4O+UqEVKvO64+9yIj/Popm2YMy9k74FXMGdexIpFqzl4dDuR1qaFkslISVDn5ufDpdrXI4G+/PyI13Xup9fw1lYAclaspGjCRJ544glqahp6fa5oP9/1NQtYvfpaWlv9UTfNAbANJ8f84zBsG6LsQROaEtp5IxgREREZOE31FElB7Q31VP3sJ+D3M+aqq8leuizqtaHWAK0Vx6JeMxjiWr/ncDBn8tWsWLSG7i9XfUm87rj7XH7ws2+yYsVKfvjAN7nv39dy222393nNXqjq13kKaLItWbIs6lTYkM799PxNjTS8+SYA2eeel5AYCguLWLXiKsCIWu0LMxzYMdpldJ4SKiIiIomjxE8kxdiBANW/eID206fImD2Hwjs+EPP69MmTAfBVVAzpOr/e1u+5DIPls8/Fk5YTnE54Ac5g37n+TLPs3geuv2v2OveWGw7iTaA/cuPNVG/6JWX3/RNtJ47jzM0l05yfkBgavT7mTLqKiYVzolb7+qLzRjAiIiKSGEr8RFLMmb++SNN7e3Hm5DLxHzZiuGLP6HbmjcGRmUmgqRF/Xd0QRdkhVtJiYGDOXk1wU0hWnHMzoZesREyz7J54xptMDrdG4r0l0E6ni+svvoLGn/6I+tdKsFtbyVywiMmf+RxGjAbufbG9pJxMTx5rr74vdrUvTqr6iYiIJJ4SP5EU493xNgCFG96Pe9y4Xq83DIP0yVMA8FVWDGps3WV68li84DJc3ab+uV1uzlt+JZ6sseFjWZ485s+6KKHTLDsnnsNlzV5/xK76GSxImwu2Te6FFzPj/m8z5fNfIGPmrIQ9f7RNdQZCVT8REZHE0uYuIikk0NZGS9lBADIXnRP3fWmTJtG8fx+tFcfIWrhosMLrYXtJOfOnX8uOnX/tctzhdDB35o3Y3d6bWr5wNafqKrnrznsS8vyhatnjjz8ybNbs9Ud4x9EnH6etvT18PLTDZn3uAshuYPxHPtZrBbg/om360tmjm7ZRe6Ix7scM+G2qK4a2Ai0iIpLKlPiJpBDf4UPYra2kTZqMKyc37vvSJgXX+Q1hxa/R66N0Z3Vw/d5FWIdfo93vx+12s2r5VXgyciO2Drjl2i9wqLSRqdMTE0dx8UYOHjwwYqt9IeEdRzslfqEdNm3DoGLRjcwbhKQvXvEkhyIiIjJ4NNVTJIU0Bbf19/Rx0470YOLXWlmZ8Ji6a/T62PzQDra+dAjb39HEe8WimzCMjumeoZ08o00dTPT6r+G2Zq+/uq/169xPzzac7D/YoDVzIiIio5gSP5EU0mxZAGSaZp/uSwuu8WutHPydPbeXlFN1tI59e44TCDZzy8wcx7yZF2IYRrjaF4vWf0XWea1f9356+pmJiIiMbkr8RIahUFWsLxUau72d5oP7AfDM61vFz5WbizM7h0BzM+2nT/Xp3r5o9Poo3XUcADvQNcFcuXg1s2YsZMWi1b1uFKL1X5EVFhZx041ridRPTztlioiIjG5a4ycyTDR6fbzw1Htct25huCq2raScy66fG9f9LaH1fRMn4cqNf31fSNqkSTTvs2itrMA9Lr/P98dje0k5geD0TgyjyzlPWh7XX/w53v+x88nMThuU5x8NVixazRuv7YjYTy9U9Yt3TImIiEjqUOInMkyEkr3171tHZdWhjoO/B77Ujwd7+g8AmOZ8Hnlkc1y3pE2eQvM+C19FBVnnLOnHk8bWUH2K0h2V2LYR9RolJgPT6PVRVd7G2qvui3g+VPU79+LpSq5FRERGGU31FEmitlO1eHfuwHumKTwFckzWVByO2I21DcOI0betg9vtZunS5XHHEt7gpSJxO3va7e00bHuTY//1Xf72g8fw+/0xr9d0xIHZXlLe6xpNrfUTEREZnVTxExlEtm3j9zbQduIEhttNxrSzPQia9++n4sffJ9DYiDX5cmzPTMBgxaLVWIdeB6InSaGdG1tboydIfW1InjY5cS0d7ECA2qefou6lv+JvaMDn9FA1fT04en/JUdWv/+JppK71kSIiIqOTEj+RQXLyD49z5m8vEmhuDh/LXLCI/Ftvp/10LdW//Dl2eztt2flUpk8L73CZ5RmDOfNCSstKCAR6Jn8uh4Obr7uRgCuNLU8/id/f3uMat9vd54bk4YpfVSV2IIDRS0UxljMvvsCpp58COqaQlk+7CmpdEOh9x1AlJv2nXnkiIiISjRI/kUEQaGnm1PPPgd+Pw+PBXVhEW80Jmt7bQ9N7e8LX5V1+JaUFF8DOauiUE61YtCZq1c9h29zU4OXoqg1sIfL6vb5W+wCc2dk48/Lw19XRXluLu7B/fe3aams5ubljjeGEe+7FsXAZf/75WwQCgejP7XLwoXu1qYuIiIjIYNEaP5FB0Lh3L/j9ZMyew+wf/pTp//bvzPzWdxl30xqMtI7kpuC29WTdsgFrz4kehbAsTx7mzAt7rPVzOZxcPWsOaS0Bjh9tj3hNf6p9IaGqX3+ne9q2zYmHfovt85F97ipyz7+At187onVnIiIiIkk24IqfaZprgG8ARvDj3y3L+oNpmvOA3wD5QC3wYcuy9gfviXpOJBU07nwXgKwlSzGCbQucWVkU3LaeMddeh7+hgfRJk3n5+X1Rk6JIVT+n28Xnvvcj3vrtK9i23XFNWddr+lPtC0mbNJmm9/bSWlkBS5f1+X7v9rdo3PkuDo+HovffCWjdmYiIiMhwMKDEzzRNA/gdcKllWbtN01wClJimuRl4APiJZVkPmqb5IeDnwFXBW2OdE+mhc4+7eKYD9vX6RLJtm8ZdOwHIXrK0x3lXTi6unNxwM/NoSVGo6hda6+dwOFm1/Gqy8ydSmTEd2293XDPr7DUDqfYBpE+bBkD9ayWMueY6HMFNZKJpPniAE//7IP5GL4609HDz94L1d+AaMwbQujMRERGR4SARUz0DQF7w8zFAFVAArAAeDh5/GFhhmmahaZpF0c4lIBZJIY1eH5sf2kGTt7VLQ/N49PX6RPIdKcdfdwbX2HGkTZka9bp4tt5fsWgNhtHxz9QwHKxYdFPHfVGuGUi1DyDnvPNxj59Aa1Ulp/74TMxr60pe5dh3voWv/DDtJ0/SWllBoLkZz9x55F16eb9jEBEREZHEG1DFz7Is2zTNO4CnTNNsBHKAm4CpQIVlWf7gdX7TNCuDx40Y52rife78/OyBhD5oCgtzkh1Cynjz5cNUH6vjnTeOYAV73Fm7q7l+7UKyczN6XN9Q38ITv3ubG25ZFNf1g+XoX0sByD9vJUVFuVGvO3m8sdcpkFmePJYtupy3d73Ihz70QTbedyM/+r9/7XJfqDK498Ar3H7behYsmDWg+DP+cSO7v/pvnH7uWaZdewVZ06d1OW/7/Rz69W85/nRHYjjhphuYtHYNAZ+PQGsbmdOm4swYup+3JIZeu2SwaGzJYNL4ksGUauNroFM9XcBXgHWWZZWYpnkx8ChwVyKCi6W21ksgjq3hh1JhYQ41NQ3JDiMlNHp97HjzKLYNO7dX4OhYJkegzc8T//EQl147m5wVK7vc8/Lz+zhSdorHfrOdQLCSFgjYPL9l75D2hDvxxpsAOOcujDkebvtwfM3Va2oW8LWvebnrrk/w5y17wt9bZysWreF0fRULZ18/8DFYNI28y6+g7u8vUfr9HzH1y/8abu3g93qp+sXPaNq7B5xOiu68i9zLrsAL4MqGLGhpaIOGtoHFIENKr10yWDS2ZDBpfMlgGu7jy+Ew+lwIG+hUz2XAJMuySgCCfzYCLcBk0zSdAME/JwFHgx/RzokAwWmQ/uD2/wGbUCeAAAZH/fkcfehhAj5f+PrQejmA07VN4YpYwG9TuquaJm/0RueJ1N5QT8uhQxguF5kLFibkMQsLi3jiiSfwZORGXROY5clj7VX3UXnYl5DvteD2O3COGUNLWRmVP/o+9a+/RvPBAxy5/xs07d2DMyeHqfd9iTGXXTHg5xIRERGRwTfQXT2PAVNM0zQty7JM01wAjAf2AzuADwAPBv98x7KsGgDTNKOeE2n0+ih9t+psi4PgrpgAj//pG9SeOcbPAM6PvgYtf8wU1t/wNQBsf4BtJYe57Pp54fMbNtyCZZX2GotpzueRRyL3youkadcusG085nwc6elx3xePeNYEhtoiDLTC6czMZPyHP0rlT35E466d4c1qANKnTWfSpz6LOz9/QM8hIiIiIkNnQBU/y7KqgU8Cj5um+S7we+Buy7JOAfcCnzFNcx/wmeDXIbHOySi37ZVDBPw9G5cDjC+Y1aNvXXcOh5PxBbPDXwdseO+dCrynveFjS5Ysw93LjpVut5ulS+ObjhniDbVxWNxzN8+BGuq2CNlLljHz/m9T+P47O6qXTic5513A1C99VUmfiIiIyAhj9FZBGIZmAIe0xi81NXp9PPST1/HbRuTzzXU8/My/4PdHX0PmdLr54Jr/S6YnL3zMCLQzzVHD9f+4DqfHQ03NCdasuRZfp+mi3aWnp/Pss3+JuzVCe0M9h778BWyfjxn3f5u0oqK47ovHcBhbdiAQXusnqWU4jC9JTRpbMpg0vmQwDffx1WmN30zgcFz3DGZAIn217e9lBEIL+iII7WAZrerncDgxZ17UJekDsB0ujgYKOfid79FeX09hYRFr194aterXn354p5//E7bPR9biJQlN+oYLJX0iIiIiI9dA1/hJP9W/+Qbusfl45g7dbpPDXaPXR+nu49hG7KmcKxatwTr0OtBzOqhhOFi5aHXE+2zDoLQpH+MrXyRn1SruuuZ6ntr8RMRru/fDi3dN4AxPJg9/9d96vU5EREREZCjpLfwkaN6/j+pfPMCx//oOrcerkx1OUgV8Pk7/5QVqn9lCyf/+HTtGtS8kWtUvWrUvxDacNIyZhu1rof7VV2j55c+5YsxYXEbXaaWRqn3xrAl0GQYLp83AM2tgffRERERERBJNFb8kOP3n5wGwW1up3vTfTP3SV0ftNLozf3uRk48/CsDxKWuxM3rfNCS/KIsf/Oyb3HTjNQQCZ6t+kap9DqfBgiUTu+xy2Vq1jLqSV/Fue4sPTpjIS88/A21n1ww6jK7VPoDi4o1s2fJkzLgcwMYvfqXX+EVEREREhpoSvyHWeuIE3h1vY7hcOLKyaTl4gNPPP8e4GyNPT0x1oTYBOeddwA35fgznSfIuvRx3fkGv9y5ecCk79rxEIOCPWu2LtMtl2sRJFK6/g8L1dwCwzpPO5s1P0BZM/nytPq655tI+fR8uw+CaefOZsnJVn+4TERERERkKSvyG2Jm//Blsm5zzLiDnvPOo+P73qH3qSbIWLyF9ytRkhzekAi0tNB/YD4ZB0Z134czK6tP9/+97X2fNmlfx+fy43S5++MA3+7QZS0jnap4DMDDw07cdYx3Axi98tc/PLSIiIiIyFEbn/MIk8Tc1UlfyCgBjr72erHOWkHf5Fdjt7Rx/8LdJjm7oNVml4PeTMXNWn5M+ILwzp2EYfd6BM9rjXL14CY7InSSicjkc3HTZlUw5V9U+ERERERmelPgNobqX/47t85G5YBHpUzuqewXrN4Bh0FJ2ELu9PckRDq2mPbsAyFx0Tr8fo7h4I8uXr+yxJq+/j3PfN7/NVZOm9NjwJcTlcuHoth7T6Xbz6a/9+4CeX0RERERkMCnxGyJ2eztnXvwLAGOuvS583Onx4C4ogECA1hMnkhVeUjTu2Q1A1gASv8LCIjZterDf1b7ujzN++gw+94Of9kjuQpxOJ1cvPCecGPan35+IiIiIyFBT4jdEWo4cof30KdyFhWSds7jLubQJEwFora5KRmhJ0VZTQ9vx4zg8HjJmDq/2BxPnzGXdbe/D7ey6BDaU5H1w6jRC9cDu/f5ERERERIYjJX5DpLXiKAAZs2b3aN0QSvzaRlHi17i3o9qXuWAhhjN2w/ZkKC7eiMPVvU+gg4/f+RGyTtZyZeH4Aa8tFBEREREZKkr8hoivogKA9MlTepxzTwxW/KpGT+LXFJzmmblocS9XJkdowxe3q6Pq53I4WLfuNrJOnQLb5s6LL03I2kIRERERkaGgxG+ItAYTv7RJk3ucG21TPW2/n6b39gKQtWhRkqOJrrh4I45gNdJh23z0tjto2mcBMHnp8oSsLRQRERERGQpK/IaILzjVM31Kz4pf58TPtvvWP24kaikrI9DcjHv8BNzDOHEKt3kArigoIuPQIZqtUgAyzfnJDU5EREREpA/UwH0ItDfU46+vx0jPwDUuv8d5Z04OjswsAk2N+OvqcI0Z06/nafT6eOGp97hu3UIys9MGGvaAbdhwC1YwUYrq2c2Y5nweeWTz0ATVR8XFG9n37jus92RR//qrHdNxnU4yZs1OdmgiIiIiInFTxW8ItIbX903usbELgGEYpE0c+HTP7SXlVB2tY1tJeb8fI5GWLFmG2+2OeY3b7Wbp0uVDFFHfFRYW8evfPcrYrGxaKyvBtvHMmo0jPT3ZoYmIiIiIxE0VvyHgqzgGQNrknuv7QtImTKTl4AFaq6vInL+gz8/R6PVRuus4AKW7qjn34ulkZqfFV3WDQam6FRdvZMuWJ2NeMxLaITjS08k6ZzHet7cD4JlnJjkiEREREZG+UcVvCLTG2NEzZKAbvGwvKQ+vD7RtO1z1S2bVLbwzZpTnH0nNz7NXnhv+3KP1fSIiIiIywijxGwKhil/MxG8ALR1C1b6AvyPxC/htSndV0+Rt7diZMsL00s6iVd1s26b+9RKqfvUL/E1NfY4LiPn8I6HaF5K1ZBlGejpGegae2XOSHY6IiIiISJ8o8Rtktm3TWhls5TBIFb/tJeXY/kCP591WUk5hYRE3X7863I+uu2hVN39zM9W//DnVv/olDa+/RsPW1/scF5yt+rm6JX8jqdoH4PR4mPqlrzL1i1/W+j4RERERGXGU+CWAv7GRI//5TSq3PNPjXPupUwSam3Hm5ODKzY36GO6CAnA6aa+tJeDzxf3c4Wpfty4QoapfY30LN7U0g98f8f5IVTff0aMc+Y+v0/DmG2efJ9hwvT8+8bF7MLrFN5KqfSEZ06aTMX1GssMQEREREekzJX4JEPD5aCk7yOHf/I62mpou585u7BK92gdguFykFY0HoPV4ddzPHanaF2LbNluf3UH2qdNcWTgel2F0OR+p6ma3t1P5wE9oqzlB+tRpTPn8FwFoeu897Pb2XuNp9PrY/NAOmryt4WPZtbVcWVAQrvqNtGqfiIiIiMhIp8QvAdzjxpFzwYXY7e2c3PyHLuda41jfF9LX6Z6NXh+lO6t7VPtCAn6b/eXN+JwePvHRj+N0d+3tF6nqVvfqy7Qdr8ZdNJ6pX/1XMhcsJG3SJGxfC80HD/QaU6SWEt6dO7h94pTwWr+RWO0TERERERnJ1M4hQQrW3Yr3rTdp2Po6Y6+/gYxp04H4WjmEpE2cCO/Ev8HL9pJy7EAAMHj8T9+g9syxiNf9DGDr37occxkGN11yWZeqW6ClhdotHS0dCm67HUcwUcxctJjWykqa9uwmM8aOlpFaSniy3DTufJexaWmsvvo6Nv/5OVX7RERERESGmCp+CeIuKGTi6hsBOPnEY+Hj8bRyCAlV/NrirPhVHz1DwO6Yvjm+YBYOhzPm9S6XK3yNA7glMzvcAgLg9AvP46+vJ2PmLLJXrgofz1p0DgCNu3fFfPxILSVaKytpr63FmZPLJ//5SyxfvlLVPhERERGRIaaKXwJNWX871X/+C017dnPmpb+SNnESrVWVAKTHUfFzR5nqGW8TdqPbGr7unE4nN954I8888xRXTpyMp6qKpr17yFp0Du319Zz603MAFKy/o8tjeeaZGG43viPltNfXR9ykJlpLidk+LwBZixdTNH48mzY92Ov3ISIiIiIiiaWKXwK5c3MYd+NqAE48+FuOfedb2O3tuPLzcWR4er0/beJEcDjwVVTQfuZ0+Hi8TdhnzZrda7P0z372n1m+fCX3fORuAE4+/gjHf/cbjn37P7F9LWQtXtJjOqcjLQ3PPBOApr2Rd/fsXO0LsQMB3t1bB0DWkqUx4xcRERERkcGjxC/BxlxzHXmXXUHmwkV45plkzJpF/s3r4rrX6fGQvXwFBAKc+ftL4ePxNmG///7v9NosvbCwiE2bHmTm2ltxZGbhO3qUur//jdbqKhzZ2RSs3xDx/vB0zwhtHbpX+0ICATgaKMSXlkXmwnNixi8iIiIiIoNHUz0TzJGWxvgPf7Tf94+58mq827dR9/LfyV99M4bLFW6CvnnzE7S1tfW4J1TNM80FEa+L1D7B6fEw4eP34H17O+mTJ5M+bTrp02fg9ESuTGYuWgz8nqY9u7EDAYxOCWakal+IDRydfhmLMzP79wMREREREZEBU8VvmPGY80mbOAl/3RlObN0e7okXq+rXuT1CpOuitU/IXrqMCR/7OGOvu4HM+QuiJn0AaZMm4Ro7Fn99Pb5jR8PHo1X7QmyHi2OM79LXT0REREREhpYSv2HGMAzyrrwKgO2vHA73xAtV/bqv4etezet+XaKapRuGQdbiJQB4394ePh6r2hdiOxxd+vqJiIiIiMjQUuI3DOVeeDGtnjyOBgqAjp54oaqfQdedOyNV8zpX/RLZLD1n1fkANGx9I5zsVVfUR632hQT8NtUVdQmJQURERERE+k5r/IYhp8fDsXnXYDd0fB3qiXfZ9XO54bzz+eNrr9Ju21GreaGq3+OPP5LQZukecz7OvDG01ZzAd/gQGTNnccfd5wJw5q9/4cT/Pkj2ynOZ9MlPJ+T5REREREQkMVTxG4YavT6OtORhOzry8lBPvCZvKx9YuiJc84tVzSsu3pjwZumGw0HOqvMAqN/6Rpdz3p3vAmrbICIiIiIyHA2o4mea5gxgc6dDY4Bcy7LGmaZ5GGgJfgB8ybKs54P3XQD8HPAAh4EPWZZ1YiCxpJLtJeV0nzwZqvrNavByZUEhL5ysiVnNC7VtSLTc8y/gzF/+TMNbWym84/0YDgcBn4/m0vcAyDpnScKfU0REREREBmZAiZ9lWYeBZaGvTdP8frfHXG9ZVpfGb6ZpOoAHgY9alvWqaZr/CnwLuHsgsaSKqD3xglW/whOnuH3iFGomTExoNS9e6TNm4i4aT9uJ4zRbpWQuWEjTe3ux29vJmDkLV17ekMckIiIiIiKxJWyqp2maacCdwKZeLl0JtFiW9Wrw6weAOxIVx0gXsydewGa/YzrjMjPZ9JuHE7Z2ry8MwyDn/AsAqN/6Os3793Hif38HaJqniIiIiMhwlcjNXdYCFZZlvd3p2EOmaRrAq8BXLcs6A0wDwnv7W5Z10jRNh2ma4yzLOhXvk+XnZycq7oQqLMzp970N9S1YMXriBQI2VblzWZh1kqLxyausZd1wFaeefoqGrW9Q/1oJBAJkz53D7Petw53T/+9fYhvI2BLpjcaXDBaNLRlMGl8ymFJtfCUy8bubrtW+Sy3LOmqaZjrwfeDHwIcS9WS1tV4CgdhtBIZaYWEONTUN/b7/5ef3EeitJx6wP2shcwbwPAOWnkf6tOn4jpSDYTD2xtUUrLuVMy1ASxLjSmEDHVsisWh8yWDR2JLBpPElg2m4jy+Hw+hzISwhUz1N05wMXA48FDpmWdbR4J8+4KfAxcFTR4Dpne4tAAJ9qfalqnh64tkOF2eM5K+jK3zfBjIXncPkf7qPwtvfh+FSZxARERERkeEqUb+tfwR41rKsWgDTNLMAl2VZdcGpnu8HdgSv3Q54TNO8JLjO717gsQTFMaKFeuJ1VvHD/6Jx57tMKL4X71tv4X1nOxPuuTcJ0XWVuWAhmQsWJjsMERERERGJQ6I2d/koXad5jgdeMk1zJ7AbmAdsBLAsKwDcBfzMNM39dFQKv5ygOFJO+vQZAPjKD9NaVQlA2sSJSYxIRERERERGmoRU/CzLmtft6zJgeYzrXwMWJ+K5U11GMPFrKSujteYEGAZp4yckNygRERERERlRtDBrmAtV/JoP7AfbxlVQgCM9PblBiYiIiIjIiJKwPn4yOFxjxuDMzcXnyGD75BsJjJ+a7JBERERERGSEUcVvmDMMg4zpM9hTncmZjPEcTMtmTrKDEhERERGREUUVvxEgMHkGVTlzwTAob8yiydua7JBERERERGQEUeI3AuzzjSfU3c/GYFtJeVLjERERERGRkUWJ3zDX6PVxsNKP7eiYlRsIQOmualX9REREREQkbkr8hrntJeXhal+Ibduq+omIiIiISNyU+A1jjV4fpbuOE/B3Tf0CfltVPxERERERiZsSv2Fse0k5tt293tdBVT8REREREYmXEr9hKlq1L0RVPxERERERiZcSv2EqVrUvRFU/ERERERGJhxK/Yaq6oj5qtS8k4LeprqgboohERERERGSkciU7AInsjrvPTXYCzELGAAAEwUlEQVQIIiIiIiKSIlTxExERERERSXFK/ERERERERFKcEj8REREREZEUp8RPREREREQkxY3EzV2cAA6Hkew4IhquccnIp7Elg0njSwaLxpYMJo0vGUzDeXx1is0Z7z1Gb73ihqFLgFeSHYSIiIiIiEiSXQq8Gs+FIzHxSwdWAVWAP8mxiIiIiIiIDDUnMBF4C/DFc8NITPxERERERESkD7S5i4iIiIiISIpT4iciIiIiIpLilPiJiIiIiIikOCV+IiIiIiIiKU6Jn4iIiIiISIpT4iciIiIiIpLilPiJiIiIiIikOFeyA0gFpmnOA34D5AO1wIcty9qf3KhkpDJN8zDQEvwA+JJlWc+bpnkB8HPAAxwGPmRZ1olkxCgjh2ma3wVuB2YAiy3L2h08HvV1S69pEo8YY+swEV7Dguf0Oia9Mk0zH/gdMBtoBfYD/2BZVk2sMaTxJfHoZXzZwC4gELz8LsuydgXvuxn4Dh3503bgY5ZlNQ11/AOhil9iPAD8xLKsecBP6HjRERmI9ZZlLQt+PG+apgN4EPhUcJy9DHwruSHKCLEZuAwo73Y81uuWXtMkHtHGFnR7DQPQ65j0gQ1827Is07KsxcBB4FuxxpDGl/RBxPHV6fxFnV6/QklfNvBL4GbLsuYADcB9Qx34QCnxGyDTNIuAFcDDwUMPAytM0yxMXlSSglYCLZZlvRr8+gHgjiTGIyOEZVmvWpZ1tPOxWK9bek2TeEUaW73Q65jExbKsU5ZlvdTp0BvAdGKPIY0viUuM8RXLjcC2TrNfHgA2DEJ4g0qJ38BNBSosy/IDBP+sDB4X6a+HTNPcaZrmT03THANMo9O76pZlnQQcpmmOS1qEMpLFet3Sa5okQvfXMNDrmPRDsJL3SWALsceQxpf0WbfxFfKSaZo7TNP8T9M004PHuowv4Agj8P9FJX4iw8+llmUtBVYBBvDjJMcjItIXeg2TRPoR4EXjSAZH9/E1zbKsc+mYxr4Q+FqyAhsMSvwG7igw2TRNJ0Dwz0nB4yJ9Fpo6ZVmWD/gpcDEd7yyFpyGYplkABCzLOpWUIGWki/W6pdc0GZAor2Gg1zHpo+AGQnOBDZZlBYg9hjS+pE8ijK/Or1/1wH8T5fWLjgrgiPt/UYnfAAV3i9oBfCB46APAO5Zl1SQvKhmpTNPMMk0zL/i5AbyfjvG1HfCYpnlJ8NJ7gceSE6WMdLFet/SaJgMR4zUM9DomfWCa5v10rNu7JfgmAsQeQxpfErdI48s0zbGmaXqCn7uA9Zx9/foTsMo0zbnBr+8FHh3aqAfOsG072TGMeKZpzqdj6/OxwGk6tj63khuVjESmac4CngCcwY+9wGcty6oyTfMiOnZXzODsNtXHkxWrjAymaf4QuA2YAJwEai3LWhTrdUuvaRKPSGMLuJkor2HBe/Q6Jr0yTXMRsBvYBzQHDx+yLOvWWGNI40viEW18Ad+mY/zYgBt4DficZVne4H3rgtc4gXeAj1qW1Ti00Q+MEj8REREREZEUp6meIiIiIiIiKU6Jn4iIiIiISIpT4iciIiIiIpLilPiJiIiIiIikOCV+IiIiIiIiKU6Jn4iIiIiISIpT4iciIiIiIpLilPiJiIiIiIikuP8fntUVV8pttf8AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1080x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize = (15,5))\n",
    "plt.plot(close, color='r', lw=2.)\n",
    "plt.plot(close, '^', markersize=10, color='m', label = 'buying signal', markevery = states_buy)\n",
    "plt.plot(close, 'v', markersize=10, color='k', label = 'selling signal', markevery = states_sell)\n",
    "plt.title('total gains %f, total investment %f%%'%(total_gains, invest))\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.8"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
